class Solution:
def find132pattern(self, nums: List[int]) -> bool:
n = len(nums)
for k in range(2, n):
for j in range(k - 1, 0, -1):
if nums[j] <= nums[k]:
continue
for i in range(j - 1, -1, -1):
if nums[i] < nums[k]:
return True
return Falseclass Solution:
def find132pattern(self, nums: List[int]) -> bool:
stack = [] # pair [num, minLeft], mono decreasing
curMin = nums[0]
for i in range(1, len(nums)):
while stack and nums[i] >= stack[-1][0]:
stack.pop()
if stack and nums[i] > stack[-1][1]:
return True
stack.append([nums[i], curMin])
curMin = min(curMin, nums[i])
return Falseclass Solution:
def find132pattern(self, nums: List[int]) -> bool:
stack, k = [], float('-inf')
for i in range(len(nums) - 1, -1, -1):
if nums[i] < k:
return True
while stack and stack[-1] < nums[i]:
k = stack.pop()
stack.append(nums[i])
return Falseclass Solution:
def find132pattern(self, nums: List[int]) -> bool:
n = len(nums)
stkTop, k = n, float('-inf')
for i in range(n - 1, -1, -1):
if nums[i] < k:
return True
while stkTop < n and nums[i] > nums[stkTop]:
k = nums[stkTop]
stkTop += 1
stkTop -= 1
nums[stkTop] = nums[i]
return False