File tree Expand file tree Collapse file tree 1 file changed +4
-1
lines changed Expand file tree Collapse file tree 1 file changed +4
-1
lines changed Original file line number Diff line number Diff line change @@ -61,12 +61,15 @@ n == nums.length
61
61
62
62
实际上,我们也可以枚举 2 的位置,这样目标变为找到一个大于 2 的数和一个小于 2 的数。由于 2 在序列的右侧,因此我们需要** 从右往左** 进行遍历。又由于题目只需要找到一个 312 模式,因此我们应该贪心地选择尽可能大的 2(只要不大于 3 即可),这样才** 更容易找到 1** (换句话说不会错过 1)。
63
63
64
- 首先考虑找到 32 模式。我们可以使用从右往左遍历,遇到一个比后一位大的数。我们就找到了一个可行的 32 模式。和上面思路类似,维护一个全局最小值即可,这样就不会错过答案。可是这样就无法做到前面提到的** 贪心地选择尽可能大的 2** ,我们选择的 2 实际上是尽可能小的 2。那如何找到尽可能大的并且比当前数小的 2 呢?
64
+ 首先考虑找到 32 模式。我们可以使用从右往左遍历的方式,当遇到一个比后一位大的数时,我们就找到了一个可行的 32 模式。
65
+
66
+ 和上面思路类似,维护一个全局最小值即可,这样就不会错过答案。可是这样就无法做到前面提到的** 贪心地选择尽可能大的 2** ,我们选择的 2 实际上是尽可能小的 2。那如何找到尽可能大的并且比当前数(3)小的 2 呢?
65
67
66
68
其实,我们可以维护一个递增栈。每次遇到一个比栈顶大的数就 pop 栈,直到栈顶比当前数字还大。那么最后一次 pop 出去的就是满足条件的最大的 2 了。找到了 32 模式,接下来,我们只需要找到一个比 2 小的数就可以直接返回 True 了。
67
69
68
70
## 关键点
69
71
72
+ - 先找到 32 模式,再找 132 模式。
70
73
- 固定 2, 从右往左遍历,使用单调栈获取最大的小于当前数的 2,并将当前数作为 3 。
71
74
72
75
## 代码
You can’t perform that action at this time.
0 commit comments