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。

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

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

目录
相关文章
|
4月前
|
存储 Python
【Leetcode刷题Python】739. 每日温度
LeetCode题目“739. 每日温度”的Python解决方案,使用单调栈来高效地计算出每天需要等待多少天才能遇到更暖天气的答案。
60 4
|
6月前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
48 3
|
7月前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
57 4
|
7月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
49 2
|
7月前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
50 2
|
7月前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
65 1
|
7月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
49 1
|
7月前
leetcode代码记录(回文数
leetcode代码记录(回文数
54 1
|
7月前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
46 1
|
7月前
|
C++
leetcode739 每日温度
leetcode739 每日温度