/**
单调栈:
首先将元素逐个入栈,栈中存放元素的索引。
入栈时进行判断,若待入栈元素比栈顶元素大,则下标相减得到栈顶元素的answer,将栈顶元素弹出
重复上述流程继续判断,直到 待入栈元素 <= 栈顶元素,入栈判断数组中下一个元素
若数组遍历完毕,栈中还有元素,则栈中剩余元素answer为0
*/
class Solution {
/**
单调栈:
首先将元素逐个入栈,栈中存放元素的索引。
入栈时进行判断,若待入栈元素比栈顶元素大,则下标相减得到栈顶元素的answer,将栈顶元素弹出
重复上述流程继续判断,直到 待入栈元素 <= 栈顶元素,入栈判断数组中下一个元素
若数组遍历完毕,栈中还有元素,则栈中剩余元素answer为0
*/
public int[] dailyTemperatures(int[] temperatures) {
//初始化,定义answer记录结果
int len = temperatures.length;
int[] answer = new int[len];
//栈
Deque<Integer> stack = new ArrayDeque<>();
for(int i = 0; i < len; i++) {
//若待入栈元素比栈顶元素大,则下标相减得到栈顶元素的answer,将栈顶元素弹出
while(!stack.isEmpty() && temperatures[i] >temperatures[stack.peek()]) {
int index = stack.pop();
answer[index] = i - index;
}
//直到待入栈元素 <= 栈顶元素,将元素入栈
stack.push(i);
}
return answer;
}
}
847

被折叠的 条评论
为什么被折叠?



