目录
- 1. 题目:
- 2. 我的代码:
- 小结:
1. 题目:
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:
输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:
输入: temperatures = [30,60,90]
输出: [1,1,0]
2. 我的代码:
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0] * len(temperatures)# 定义单调栈——单调递增栈stack = [0]# 遍历for i in range(1, len(temperatures)):# 大于则记录并弹出来while temperatures[i] > temperatures[stack[-1]]:answer[stack[-1]] = i - stack[-1]stack.pop()if stack == []:break# 小于等于则进栈stack.append(i)return answer
单调栈应对的题目类型就是:
寻找该元素右边或者左边第一个比它大或者小的元素
(这道题的单调栈记录的是索引,为了方便计算距离)
依次拿去元素,查看元素是否满足条件,即比栈口元素大,如果比栈口元素大,则弹出栈口元素,并且这时栈口元素已经找到了距离他最近的大值。所以先记录一下栈口元素的大值距离赋值给这个元素同索引的answer。
如果栈都空了,就没必要再比较了,因为会越界。
其余的情况,就是该元素小于等于栈口元素,所以存进去即可。
小结:
关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可: