题目链接
笨方法: 时间超限
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
vector<int> ans;
//方法一: 每一个气温都便利一次, n^2复杂度
for(int i = 0; i < T.size()-1; i++){
int tmp = 1;
bool flag = false;
for(int j = i+1; j < T.size(); j++, tmp++)
if(T[j] > T[i]){
ans.push_back(tmp), flag = true;
break;
}
if(!flag)
ans.push_back(0);
}
ans.push_back(0); //最后一天
return ans;
}
};
方法二: 维护递减栈 + 哈希表 + 递归调用判断
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
vector<int> ans(T.size());
stack<int> tmp; //哈希表:储存对应下标
//方法二: 维护递减栈
for(int i = 0; i < T.size(); i++)
solve(i, T, ans, tmp);
return ans;
}
void solve(int i, vector<int> &T, vector<int> &ans, stack<int> &tmp){
if(tmp.empty()) {
tmp.push(i);
return;
}//栈为空
else if(T[i] <= T[tmp.top()]){
tmp.push(i);
return;
}
else if(T[i] > T[tmp.top()]){ //大于
ans[tmp.top()] = i-tmp.top(); //记录一个答案
tmp.pop();
solve(i, T, ans, tmp); //递归调用
}
}
};