LeetCode -456.132模式
给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。
如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。
题解
获取一个数组leftmin,代表nums中某数前面的最小数。使用一个单调递减的栈,维护好数组的一个区间内的最大值和次大值,最大元素在栈底。
class Solution(object):
def find132pattern(self, nums):
n=len(nums)
leftmin=[float("inf")]*n
leftmin[0]=nums[0]
for i in range(1,n-1):
leftmin[i]=min(leftmin[i-1],nums[i])
stack=[]
for k in range(n-1,-1,-1):
numj=float("-inf")#给2尽可能小的值
while stack and stack[-1]<nums[k]:
numj=stack.pop()
if numj>leftmin[k]:
return True
stack.append(nums[k])
return False