单调栈(Monotonic Stack)是一种特殊的栈结构,它保持栈内元素的单调性(单调递增或单调递减)。主要用于解决一类需要寻找下一个更大/更小元素的问题。
单调递增栈:栈底到栈顶元素递增(弹出时,出栈元素大小单调递增)
单调递减栈:栈底到栈顶元素递减遍历数组时,对于每个元素:
当栈不为空且当前元素破坏单调性时,弹出栈顶元素
弹出的同时进行相应处理(如记录结果)
将当前元素入栈
模板
Deque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < 长度; i++) {
//本身单调栈,如果弹出时,出栈元素大小单调递增,即单调递增栈,就判断i处大于(看条件,有的需要等于)stack.peek()处元素
while (!stack.isEmpty() && i的对应数组位置数据 大于小于等于,看具体情况 stack.peek()的对应数组位置数据) {
int 接受数据 = stack.pop();
//具体处理逻辑
}
stack.push(i);
}