按经验应当使用一个单调栈,但是这里的用法比较奇特,需要从后往前遍历。
我们考虑递减栈pop过程中被弹出去的元素,如果能够找到一个比前面的大的,就说明成功了。
试想[-1,3,2,0]
栈增长分别为[0]--[2],那么0就是被弹出的元素。被弹出说明了两件事情:1,前面必定有一个比他大的元素。2,只要前面再有一个比它小的那么查找就完成了。
我们用一个变量保存被弹出的最大值,只要遍历时发现有数字比这个值小,就好了。
class Solution:
def find132pattern(self, nums: List[int]) -> bool:
k=-0x7fffffff
stk=[]
for n in nums[::-1]:
if n<k:
return True
while stk and stk[-1]<n:
k=max(k,stk.pop())
stk.append(n)
return False