Skip to content

Commit 9090dd0

Browse files
author
lucifer
committed
feat: $975
1 parent 915443b commit 9090dd0

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

problems/975.odd-even-jump.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,20 @@ class Solution:
146146

147147
解决这个问题的方法最简单的莫过于使用两次排序,具体见下方代码区。
148148

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+
149163
## 代码
150164

151165
代码支持: Python3, CPP
@@ -188,6 +202,19 @@ class Solution:
188202
- 时间复杂度:$$O(NlogN)$$
189203
- 空间复杂度:$$O(N)$$
190204

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+
191218
更多题解可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。
192219

193220
关注公众号力扣加加,努力用清晰直白的语言还原解题思路,并且有大量图解,手把手教你识别套路,高效刷题。

0 commit comments

Comments
 (0)