单调栈
class Solution {
public:
vector<int> temperatures(vector<int>& dailyTemperatures) {
//由于要找某个元素右边最近的比这个元素大的位置,所以可以逆向遍历创建一个单调栈
stack<int> stack1;
int n =dailyTemperatures.size();
vector<int> ans;
//逆向遍历创建一个单调栈
//只要栈非空并且栈顶的元素比要入栈的元素小,就让其出栈
for(int i=n-1;i>=0;i--){
while(!stack1.empty()&&dailyTemperatures[stack1.top()]<=dailyTemperatures[i]){
stack1.pop();
}
//如果栈为空,就表明该元素后面不存在比它高的温度,就输出0到答案ans中
if(stack1.empty()){
ans.push_back(0);
}else{
//否则,就输出两者之间相差几天,输出到ans中
ans.push_back(stack1.top()-i);
}
//每次记录入栈的元素的位置
stack1.push(i);
}
//将ans进行反转,得到答案
reverse(ans.begin(),ans.end());
return ans;
}
};