1
+ class Solution :
2
+ def find132pattern (self , nums : List [int ]) -> bool :
3
+ n = len (nums )
4
+ if n < 3 :
5
+ return False
6
+ stack = []
7
+ k = - 1
8
+ for i in range (n - 1 , - 1 , - 1 ):
9
+ if k > - 1 and nums [k ] > nums [i ]:
10
+ return True
11
+ while len (stack ) > 0 and nums [i ] > nums [stack [- 1 ]]:
12
+ k = stack .pop ()
13
+ stack .append (i )
14
+ return False
15
+
16
+ # class Solution:
17
+ # def makeSeg(self, arr, i, j):
18
+ # seg = self.seg
19
+ # if (i, j) in seg:
20
+ # return seg[(i, j)]
21
+ # if i == j:
22
+ # seg[(i, j)] = arr[i]
23
+ # return arr[i]
24
+ # mid = (i + j) // 2
25
+ # curr = max(self.makeSeg(arr, i, mid), self.makeSeg(arr, mid + 1, j))
26
+ # seg[(i, j)] = curr
27
+ # return curr
28
+
29
+ # def getMax(self, arr, i, j, ni, nj):
30
+ # seg = self.seg
31
+ # if ni >= i and nj <= j:
32
+ # return seg[(ni, nj)]
33
+ # if (ni < i and nj < i) or (ni > j and nj > j):
34
+ # return float('-inf')
35
+ # mid = (ni + nj) // 2
36
+ # return max(self.getMax(arr, i, j, ni, mid), self.getMax(arr, i, j, mid + 1, nj))
37
+
38
+ # def find132pattern(self, nums: List[int]) -> bool:
39
+ # n = len(nums)
40
+ # self.seg = {}
41
+ # self.makeSeg(nums, 0, n - 1)
42
+ # for i in range(n):
43
+ # for j in range(i + 2, n):
44
+ # if nums[j] > nums[i] and self.getMax(nums, i, j, 0, n - 1) > nums[j]:
45
+ # return True
46
+ # return False
47
+
48
+ # class Solution:
49
+ # def find132pattern(self, nums: List[int]) -> bool:
50
+ # n = len(nums)
51
+ # next_lowest = [n for i in range(n)]
52
+ # stack = []
53
+ # for i in range(n):
54
+ # while len(stack) > 0 and nums[i] < nums[stack[-1]]:
55
+ # curr = stack.pop()
56
+ # next_lowest[curr] = i
57
+ # for j in range(curr):
58
+ # if nums[j] < nums[i]:
59
+ # return True
60
+ # stack.append(i)
61
+ # return False
62
+
63
+ # class Solution:
64
+ # def find132pattern(self, nums: List[int]) -> bool:
65
+ # currMin = float('inf')
66
+ # currMax = float('-inf')
67
+ # for num in nums:
68
+ # currMin = min(currMin, num)
69
+ # currMax = max(currMax, num)
70
+ # if num > currMin and num < currMax:
71
+ # return True
72
+ # return False
0 commit comments