avatar

LeetCode-739 每日温度

📝题目

1
2
3
4
5
根据每日气温列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。


📝思路

准备两个保存还未得到匹配的温度和下标,遍历 temperatures 。如果该日温度超过栈顶的温度,则把栈中所有小于该日温度的数据都弹出(按照这个算法,栈中的数据必然是从大到小(底->顶)排列的);如果该日温度低于栈顶温度,必然低于栈中所有温度,则 push 入栈中。注意栈空时的处理。

📝题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vector<int> dailyTemperatures(vector<int>& T) {
int len = T.size();
vector<int> result;
result.resize(len);

stack<int> key;
stack<int> value;

for (int i = 0; i < len; ++i){
while (!value.empty() && T[i] > value.top()){
int t_key = key.top();
result[t_key] = i-t_key;
value.pop();
key.pop();
}
key.push(i);
value.push(T[i]);
}

while (!key.empty()){
int temp = key.top();
key.pop();
result[temp] = 0;
}
return result;
}
Author:WhiteBeerHouse
Link:https://github.com/WhiteBeerHouse/WhiteBeerHouse.github.io/tree/master/2020/04/27/LeetCode-739-%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6/
Copyright Notice:All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.