简介
单调栈不是一种新的数据结构,它就是一个栈。但是它里面的元素是按顺序排的。
单调栈能够解决一类特定的问题,抽象的概括就是:
在一个数组中,每个元素想要找到在它左边或者右边第一个比他大/小的元素,此时可以用单调栈来解决
代码模版:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def find_next_larger(nums): '''寻找数组中每个元素右侧第一个比他大的 其中,找不到就用-1替代;找到就用那个元素的下标。
Args: nums: 一维数组
Returns: 返回一个对应长度的一维数组 ''' n = len(nums) mono_stack = [] ans = [-1]*n for i in range(n): while mono_stack and nums[mono_stack[-1]] < nums[i]: prev = mono_stack.pop() ans[prev] = i mono_stack.append(i) return ans
|
参考资料
- OI Wiki的介绍