单调栈:栈中的元素全部都是递增或递减的
特点:
1.单调栈里的元素具有单调性
2.元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除
3.维护: O(n) 级的时间复杂度,
创建单调递增栈:
遍历一个数组
- 当遍历到元素a
- 栈为空或a大于栈顶元素时,入栈
- 栈不为空且a小于栈顶元素时,栈顶元素出栈,直到a大于栈顶元素或栈为空
特点:
栈中最小元素一定是数组中到元素a为止的最小元素
可以找到元素a向左遍历第一个比他小的元素
创建单调递减栈
遍历一个数组
- 当遍历到元素a
- 栈为空或a小于栈顶元素时,入栈
- 栈不为空且a大于栈顶元素时,栈顶元素出栈,直到a小于栈顶元素或栈为空
特点:
栈中最大元素一定是数组中到元素a为止的最大元素
可以找到元素a向左遍历第一个比他大的元素
例题:
https://leetcode.com/problems/largest-rectangle-in-histogram/submissions/