单调栈
Created Apr 6, 2025 - Last updated: Apr 6, 2025
Seeding 🌱
algorithm
模板
栈
在满足"先进后出"特性的基础上,若栈中元素从栈顶到栈底具有单调性,则称其为单调栈。
构造单调递增栈的过程概括如下:从左向右依次遍历序列,处理每一个元素。若栈为空,则直接将当前元素入栈;若栈非空,判断栈顶位置与对应的元素是否小于或等于当前元素,将小于或等于当前元素的栈顶元素依次出栈,知道栈为空或栈顶位置与对应的元素大于当前元素,再将当前元素入栈。
由此可知,构造过程中元素的进栈操作需根据情况弹出单调栈中既有元素,但整个过程中每个元素入栈只有一次,出栈一次,所以其时间复杂度不再是普通的常数时间,而是一个与序列长度成正比的线性时间。
主要解决问题类型:
- 查找左、右区间中第一个比当前元素大或小的元素。
- 确定元素是否某个区间最值
- 求最大区间
- 求柱状图中的最大矩形
例题:
- 模板题
- 柱状图
- 接雨水
- 给定一个非负整数num和一个整数k,请移除num中的k位数字,使得剩下的数最小。注:num只包含数字,且除了0以外不包含任何前导0