栈里面是单调递增的,(由 栈顶 到 栈底 是单调增的
因为要寻找的是第一个比之前遍历过的元素更大的,如果当前元素比栈顶大,就弹出栈顶元素,并且更新结果数组。弹出的原因是已经找到比它大的元素了,留在栈中没有作用。由于小的元素都被弹出去了,所以栈是单调增的。
关键就是处理好栈顶元素和当前元素的大小关系
如果小于或者等于,就直接加入栈中
如果大于就更新结果数组,然后不断弹出(所以用的是while)弹出小的元素,最后再将该元素本身加入栈中
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> res(temperatures.size(), 0);
stack<int> st;
st.push(0);
for(int i = 1; i < temperatures.size(); i++)
{
if(temperatures[i] <= temperatures[st.top()])
st.push(i);
else
{
while(!st.empty() && temperatures[i] > temperatures[st.top()])
{
res[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
}
return res;
}
};