leetcode739.每日温度

题目描述:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

1
2
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

1
2
输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

1
2
输入: temperatures = [30,60,90]
输出: [1,1,0]

思路

在一维数组中,要寻找任一个元素右边或者左边第一个比自己大或者小的元素的位置,此时就可以使用单调栈

1.单调栈里存放元素的下标就可以了。

2.求第一个更大的元素时,单调栈中的元素是递减的(栈底到栈顶),求第一个更小的元素时是递增的。

3.遇到符合题意(第一个更大/小)的元素时候,出栈并计算,再将当前元素入栈。否则,直接入栈当前元素。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> result(temperatures.size(),0);
stack<int> stk;
stk.push(0);
for(int i = 1;i < temperatures.size();i++){
while(!stk.empty()&&temperatures[i]>temperatures[stk.top()]){
result[stk.top()] = i-stk.top();
stk.pop();
}
stk.push(i);
}
// while(!stk.empty())
// {
// result[stk.top()] = 0;
// stk.pop();
// }
return result;
}
};

leetcode739.每日温度
http://showfaker.top/2024/02/24/daily-temperatures/
作者
ShowFaker
发布于
2024年2月24日
许可协议