739. 每日温度
问题
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
分析
暴力,枚举,两个for循环,尝试发现会超时。
单调栈模板题。
法一、暴力,超时,47/48.
class Solution {
public:
vector<int> res;
int q_n;
vector<int> dailyTemperatures(vector<int>& temperatures) {
this->q_n = temperatures.size();
res.resize(q_n, 0);
for (int i = 0; i < q_n; i++) {
int k = 0;
for (int j = i+1; j < q_n; j++) {
if (temperatures[j] > temperatures[i]) {k = j; break;}
}
k == 0 ? res[i] = 0 : res[i] = k-i;
}
return res;
}
};
法二、单调栈
模板题。
class Solution {
public:
vector<int> res;
int q_n;
stack<pair<int, int> > stk; // val, index
vector<int> dailyTemperatures(vector<int>& temperatures) {
this->q_n = temperatures.size();
res.resize(q_n, 0);
for (int i = 0; i < q_n; i++) {
while(!stk.empty() && stk.top().first < temperatures[i]) {
int x = stk.top().second;
res[x] = i - x;
stk.pop();
}
stk.push(make_pair(temperatures[i], i));
}
return res;
}
};

浙公网安备 33010602011771号