1. 每日温度(LeetCode 739)
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,
其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
思路:
- 单调栈的作用:用于解决寻找右边第一个比当前元素 大/小 的元素
- 单调栈中存放的是数组的下标
- 寻找右边第一个比当前元素大的元素时,从栈底到栈顶为递减序列。
- 时间复杂度:O(n);空间复杂度:O(n)
class Solution {
// 暴力解法
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] answer = new int[n];
// 单调栈,存放的是下标
Stack<Integer> stack = new Stack<Integer>();
// 遍历数组元素
for(int i = 0; i<n; ++i) {
if(stack.empty()) {
stack.push(i);
continue;
}
while(!stack.empty() && temperatures[i] > temperatures[stack.peek()]) {
answer[stack.peek()] = i-stack.peek();
// 弹出栈顶下标
stack.pop();
}
// 下标i入栈
stack.push(i);
}
// 最后留在战中的元素右边,answer默认为0
return answer;
}
}
标签:下标,int,算法,temperatures,answer,stack,单调
From: https://www.cnblogs.com/hifrank/p/18474018