单调栈问题特征
单调栈,就是栈的应用,里面的元素的大小按照他们所在栈内的位置,满足一定的单调性。
- 单调栈里的元素具有单调性
- 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除
- 单调递增:栈可以找到元素向左向右遍历第一个比他小的元素,当元素出栈时,说明这个新元素是出栈元素向后找第一个比其小的元素,新栈顶元素是出栈元素向前找第一个比其小的元素
- 单调递减:栈可以找到元素向左享有遍历第一个比他大的元素
单调栈问题思路
- 常用于一组数组,结果与数组中元素位置及元素大小都有关系,遇到的问题和前后元素之间的大小关系有关系
- 思考思路为:固定数组中的一个元素去想该点所需信息,观察数组中每一个元素的结果与其左右的第一个比它大或小的元素是否有关系,要取左右更大的数则用递减栈,取左右更小的数则用递增栈。
- 另外,关注出栈时的意义,出栈时往往可以计算出该点元素的结果,结合业务去计算目的结果
- 需要单独思考栈空,元素相等,元素处理完后栈内剩余元素的处理,可使用哨兵优化
- 栈内结果常常储存为元素的下标,因为这类问题往往与下标关联,存储下标便于转换为其结果
单调栈问题解法
维护一个栈