• 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 天之后,等多少天才会更暖。