Monotonic Stack

Last renew: October 30, 2022 am

monotonic stack

单调栈,能够解决的问题很单一,就是下一个更大,或者下一个更小之类的

模版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int[] nextGreaterElement(int[] nums) {
int n = nums.length;
// 存放答案的数组
int[] res = new int[n];
Stack<Integer> s = new Stack<>();
// 倒着往栈里放
for (int i = n - 1; i >= 0; i--) {
// 判定个子高矮
while (!s.isEmpty() && s.peek() <= nums[i]) {
// 矮个起开,反正也被挡着了。。。
s.pop();
}
// nums[i] 身后的更大元素
res[i] = s.isEmpty() ? -1 : s.peek();
s.push(nums[i]);
}
return res;
}

很多东西只要对模版微调就可以解决