栈:每日温度
题目描述:给定一个每天温度数组,返回每天温度距离下一个高温在几天后。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:
输入: temperatures = [30,40,50,60] 输出: [1,1,1,0]
题解1:暴力解法
class Solution {public int[] dailyTemperatures(int[] temperatures) {// 方法一:暴力解法int[] res = new int[temperatures.length];for (int i = 0; i < temperatures.length; i++) {for (int j = i + 1; j < temperatures.length; j++) {if (temperatures[j] > temperatures[i]) {res[i] = j - i;break;}}}return res;}
}
题解2:单调栈
class Solution {public int[] dailyTemperatures(int[] temperatures) {// 方法二:单调栈(单调不增的栈) // 栈中维护【待找到下一个最高温】的索引Deque<Integer> stack = new ArrayDeque<>();int[] res = new int[temperatures.length];for (int i = 0; i < temperatures.length; i++) {// 栈不为空时,持续(循环)对比当前温度是不是栈顶的下一个最高温while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {int index = stack.pop(); // 进到循环,说明当前温度是栈顶的下一个最高温 res[index] = i - index; // 记录栈顶温度i-index天是下一个最高温}stack.push(i);//栈为空 或者 当前温度小于栈顶温度 =》说明下一个更高温还没出现}return res;}
}
练习地址:https://leetcode.cn/problems/daily-temperatures/?envType=study-plan-v2&envId=top-100-liked