问题抽象
找到每个元素的最近更大元素的位置
算法:单调栈
最经典的单调栈问题,只要抽象出问题就一定要想到
时间复杂度
$O(N)$
代码
class Solution {
public:
// 单调栈中的元素:第一次被遍历的时候没办法确定结果,先存到栈中
// 单调栈:用来找比某元素大/小的【最近元素】
vector<int> dailyTemperatures(vector<int>& T) {
stack<int> stk;
int n = T.size();
vector<int> ans(n);
for(int i = 0; i < n; i ++){
int t = T[i];
while(stk.size() && T[stk.top()] < t){
int j = stk.top();
stk.pop();
ans[j] = i - j;
}
stk.push(i);
}
return ans;
}
};