2022-8-8 剑指offer-单调栈

剑指 Offer II 038. 每日温度

难度中等

请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

 1 class Solution {
 2     public int[] dailyTemperatures(int[] temperatures) {
 3         ArrayDeque<Integer> stack=new ArrayDeque<>();
 4         int n=temperatures.length;
 5         int[] ans=new int[n];
 6         for (int i=0;i<n;i++){
 7             if (stack.isEmpty()){
 8                 stack.push(i);
 9             }else if (temperatures[i]<temperatures[stack.peek()]){
10                 stack.push(i);
11             }else{
12                 int top=stack.peek();
13                 while (!stack.isEmpty()&&temperatures[i]>temperatures[top]){
14                     ans[top]=i-top;
15                     stack.pop();
16                     if (!stack.isEmpty()) top=stack.peek();
17                 }
18                 stack.push(i);
19             }
20         }
21         return ans;
22     }
23 }

思路:单调递减栈,注意存储的是下标而不是温度本身。遇到小的就进栈,遇到大的就将上一个小的答案更新,出栈,直到空或者遇到更大的。

posted on 2022-08-08 10:36  阿ming  阅读(16)  评论(0编辑  收藏  举报

导航