单调栈的主要应用场景:即找左边或右边第一个大于/小于自身的元素,可以说课这个题一模一样。栈中元素永远递减,当遇到大的,就一致排出,保持递减性
其中一类单调栈的核心:当打破单调性的新元素出现时,旧元素的值可以被确定。
cpp
typedef pair<int, int> P;
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> ans(n, 0);
vector<P> st{P(INT_MAX, -1)};
for(int i=0;i<n;i++)
{
int temp = temperatures[i];
while(temp > st.back().first)
{
int pos = st.back().second;
ans[pos] = i - pos;
st.pop_back();
}
st.push_back(P(temp, i));
}
return ans;
}
};