对每一个位置,求右边第一个比它大的数的位置。从后往前扫一遍,维护单调栈。
code
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
int n=T.size();
vector<int> ans(n,0);
stack<int> s;
for(int i=n-1;i>=0;i--){
while(s.size()>0 && T[s.top()]<=T[i]){
s.pop();
}
if(s.empty()){
ans[i]=0;
}else{
ans[i]=s.top()-i;
}
s.push(i);
}
return ans;
}
};