经典算法题 - 每日温度

前言
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]
思路
- 这题可以用暴力破解法求解,也是我第一时间的解法,虽然能 AC,但效果不佳。
- 标准的解法是使用单调栈求解,比较新颖。
代码1,暴力法
1 | |
代码2,单调栈
- 单调栈的基本思路是维护一个单调递增或单调递减的栈,由于题目只要下标,栈中保存下标即可
- 在遍历输入数组的过程中进行判断:
- 如果栈为空则入栈
- 如果当前元素小于或等于栈顶元素,意味着在降温,入栈
- 如果当前元素大于栈顶元素,意味着最少找到了一个升温的位置,更新返回的数组下标
- 如果遍历完了栈中仍有元素,则将栈中的元素对应的下标赋值为0
1 | |
总结
- 升温数组这题其实主要考查对单调栈的运用
- 对栈的运用得当,则很好解
经典算法题 - 每日温度
http://jxr202.github.io/algorithm/algorithm_002-ab88061d96da/