-
2.14
res[index] = i-index;for 循环中的 i 是当前天气,index 才是那天的天气- 骨架想出来了
-
2.1
- 想到了代码的骨架,但没搞懂答案数组的 index 是之前某天,需要 当前的日子-当前的日子来确定天数
-
1.20
- 栈里存的是未确定 ans 的天数,先遍历每一天,遍历内的判断是(while 循环看栈顶元素能不能确定 ans 答案)
-
11.21
- 需要一个结果表初始化为0(默认就是),一个Deque栈
- 栈里放的是天数,for循环中靠判断不为空且当前温度大于栈顶温度,弹出上一天,记录这一天(i-preIndex)
- 不管怎样都要入栈当前这一天
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int length = temperatures.length;
int ans[] = new int[length];
Deque<Integer> stack = new LinkedList<>();
for(int i =0;i<length;i++){
int temperature = temperatures[i];//取出索引对应的天数
while(!stack.isEmpty()&&temperature>temperatures[stack.peek()]){
//取出栈顶的温度索引
int prevIndex = stack.pop();
//在答案数组中为找到的索引位置计算天数:当前的天数-当时的天数
ans[prevIndex] = i-prevIndex;
}
stack.push(i);
}
return ans;
}
}
- 难的是索引逻辑,索引为天数,取温度时是靠天数取温度temperatures[i]
- 推出栈和进栈的都是索引天数,往最终答案数组里靠天数索引计算天数
- 在while循环中:栈保持 单调递减(对应温度递减)
- O(n)
一句话总结
维护一个单调递减栈,栈里放“还没找到更暖天”的索引。
每次遇到更高温度,就把栈顶弹出并计算天数差。
最终 ans[i] 存的就是:第 i 天之后,等多少天才会更暖。