单调递减栈解决leetcode739每日温度问题
思路:很简单的一道单调栈的题目,就是要找出每个元素右侧第一个比他大的元素,用单调递减栈去解决。如果栈不为空并且当前当前元素大于栈顶元素的时候,就会弹出栈内的元素,对于弹出的栈来说,当前元素就是他右侧第一个比他大的元素。
题目:
请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
//递减单调栈找出每个元素右侧第一个出现的最大值
public int[] dailyTemperatures(int[] temperatures) {
int rightMax;
int[] res=new int[temperatures.length];
LinkedList<Integer> stack=new LinkedList<Integer>();
for(int i=0;i<temperatures.length;i++){
while(!stack.isEmpty()&&temperatures[stack.peek()]<temperatures[i]){
res[stack.peek()]=i-stack.pop();
}
stack.push(i);
}
//还在栈里,说明右侧没有比他大的
while(!stack.isEmpty()){
res[stack.pop()]=0;
}
return res;
}

浙公网安备 33010602011771号