题目解析
这道题目我们可以先找J。找出来j,开始找K,找K的条件是K要比J小,但是下标大,这我们可以一个一个遍历,最后找I,I要在K的基础上找,比K小,下标比J小。这次利用单调栈,我们储存的数值其实是可选的J的下标。
code
class Solution:
def find132pattern(self, nums: List[int]) -> bool:
n = len(nums)
# 单调栈,存储的是可选的j的下标
stk = [0]
# minv[j] 表示 a[0..j] 中的最小值,在这里我们选的就是i的值
minv = [nums[0]]
for k in range(1, n):
while stk and nums[stk[-1]] <= nums[k]:#首先找出下标比j大,值比k小的
stk.pop()
if stk and minv[stk[-1]] < nums[k]:#之后就可以选i了,i是下标比j小值比k小的。
return True
stk.append(k)
minv.append(min(minv[-1], nums[k]))
return False