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天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
10 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0
http://www.vxiaotou.com