Monostack:找邻居助手
Next Greater Element
stack = []
for n in nums:
while stack and n>stack[-1]:
m = stack.pop() # m的nextGreater是n
stack.append(n)单调栈

例题:132 模式
Last updated
stack = []
for n in nums:
while stack and n>stack[-1]:
m = stack.pop() # m的nextGreater是n
stack.append(n)
Last updated
stack = []
for i, n in enumerate(nums):
while stack and n>stack[-1][1]:
j, m = stack.pop() # m等到nextGreater要i-j
stack.append((i, n))给你一个整数数组 nums ,数组中共有 n 个整数。
132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,
并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。
如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。
输入:nums = [1,2,3,4]
输出:false
解释:序列中不存在 132 模式的子序列。def find132pattern(nums):
stack = [] # has number "3"
mmax = float('-inf') # number "2"
for n in nums[::-1]: # look for number "1"
if n < mmax: return True
while stack and n > stack[-1]:
mmax = stack.pop()
stack.append(n)
return False