栈----4.每日温度
739. 每日温度 - 力扣(LeetCode)
/**
单调栈:
首先将元素逐个入栈,栈中存放元素的索引。
入栈时进行判断,若待入栈元素比栈顶元素大,则下标相减得到栈顶元素的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;}
}