leetcode代码记录(每日温度

简介: leetcode代码记录(每日温度

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。

如果栈都空了,就没必要再比较了,因为会越界。

其余的情况,就是该元素小于等于栈口元素,所以存进去即可。

目录
相关文章
|
1月前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
22 3
|
2月前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
28 4
|
2月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
24 2
|
2月前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
26 2
|
2月前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
23 1
|
2月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
25 1
|
2月前
leetcode代码记录(回文数
leetcode代码记录(回文数
24 1
|
2月前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
19 1
|
2月前
|
C++
leetcode739 每日温度
leetcode739 每日温度
|
2月前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
27 0