单调栈的使用场景:
要求当前元素右边第一个比它大的元素(此时栈内元素单调递增)
要求当前元素右边第一个比它小的元素(此时栈内元素单调递减)
当前遍历到的元素就是右边第一个比它大的元素,栈顶元素就是当前元素
739. 每日温度
单调栈题目解题模板:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
// 递增栈
stack<int> st;
vector<int> result(T.size(), 0);
st.push(0);
for (int i = 1; i < T.size(); i++) {
if (T[i] < T[st.top()]) { // 情况一
st.push(i);
} else if (T[i] == T[st.top()]) { // 情况二
st.push(i);
} else {
while (!st.empty() && T[i] > T[st.top()]) { // 情况三
result[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
}
return result;
}
};
496.下一个更大元素 I
两个数组,加一个map即可
503.下一个更大元素II
循环了,取模即可
42. 接雨水
横向计算面积和
左边第一个比当前元素大的元素在栈里
84.柱状图中最大的矩形
前后要加上0