File tree Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -146,6 +146,20 @@ class Solution:
146
146
147
147
解决这个问题的方法最简单的莫过于使用两次排序,具体见下方代码区。
148
148
149
+ 现在已经有了两个数组,这两个数组可以帮助我们
150
+
151
+ - ** 快速** 找到下一个最小的比其大(或等于)的数。(奇数跳)
152
+ - ** 快速** 找到下一个最大的比其小(或等于)的数。(偶数跳)
153
+
154
+ 数据已经预处理完毕。接下来,只需要从结果倒推即可。这提示我们从后往前遍历。
155
+
156
+ 算法:
157
+
158
+ - 使用前面的方法预处理出 next_higher 和 next_lower
159
+ - 使用两个数组 higher 和 lower。higher[ i] 表示是否可从 i 开始通过跳高的方式奇偶跳到达数组最后一项,lower 也是类似。
160
+ - 从后往前倒推遍历。如果 lower[ next_higher[ i]] 为 true 说明 i 是可以通过跳高的方式奇偶跳到达数组最后一项的。higher[ next_lower[ i]] 也是类似。
161
+ - 最后返回 higher 中 为 true 的个数。
162
+
149
163
## 代码
150
164
151
165
代码支持: Python3, CPP
@@ -188,6 +202,19 @@ class Solution:
188
202
- 时间复杂度:$$ O(NlogN) $$
189
203
- 空间复杂度:$$ O(N) $$
190
204
205
+ 有的同学好奇为什么不考虑 lower。类似:
206
+
207
+ ``` py
208
+ ans = 1
209
+ for i in range (n - 2 , - 1 , - 1 ):
210
+ higher[i] = lower[next_higher[i]]
211
+ lower[i] = higher[next_lower[i]]
212
+ ans += higher[i] or lower[i]
213
+ return ans
214
+ ```
215
+
216
+ 根本原因是题目** 要求我们必须从奇数跳开始** ,而不是能偶数跳开始。如果题目不限制奇数跳和偶数跳,你可以自己自由选择的话,就必须使用上面的代码啦。
217
+
191
218
更多题解可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
192
219
193
220
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。
You can’t perform that action at this time.
0 commit comments