题目
https://leetcode-cn.com/problems/iIQa4I/
解题思路
用一个栈保存每日温度在数组中的下标,且维护一个单调递减的栈。
步骤:
- 入栈:遍历每日温度,如果栈为空,则把当前温度保存到栈中。(保存下标)。
- 出栈:比较栈顶元素和当前温度,如果栈顶元素小于当前温度,则出栈,完成一次最近升温天数的统计。继续出栈判断是否还有小于当前温度的天,最后将当前温度的数组下标入栈。
- 状态: 由于当前温度只要大于栈内元素,我们就会出栈,所以可以发现栈总是递减的状态。
为什么选择数据结构:栈。
因为需要拿当前温度和之前的温度相比较,所以这是一个从后到前的推导过程,可以考虑选择栈为数据集合。
代码
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Stack<Integer> stack = new Stack<>();
int[] result = new int[temperatures.length];
for(int i = 0; i < temperatures.length; i++) {
while(!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]) {
int preIndex = stack.pop();
result[preIndex] = i - preIndex;
}
stack.push(i);
}
return result;
}
}
总结
用一个栈把每日温度在数组中的下标,维护一个单调递减的栈。