栈里面存放的数据都是有序的,所以可以分为单调递增栈和单调递减栈两种:
(1)单调递增栈就是从栈底到栈顶是从大到小
(2)单调递减法栈就是从栈底到栈顶是从小到大
leetcode503 下一个更大元素II
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int> res(nums.size(), -1);
stack<int> stk;
for (int j = 0; j < 2 * nums.size() - 1; ++j) {
int i = j % nums.size();
if (stk.empty() || nums[i] <= nums[stk.top()]) {
stk.push(i);
} else {
while (!stk.empty() && nums[i] > nums[stk.top()]) {
int pos = stk.top();
stk.pop();
res[pos] = nums[i];
}
stk.push(i);
}
}
return res;
}
};