2022-8-8 剑指offer-单调栈
请根据每日 气温
列表 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 }
思路:单调递减栈,注意存储的是下标而不是温度本身。遇到小的就进栈,遇到大的就将上一个小的答案更新,出栈,直到空或者遇到更大的。