975. Odd Even Jump Hard
1/**
2 * [975] Odd Even Jump
3 *
4 * You are given an integer array arr. From some starting index, you can make a series of jumps. The (1^st, 3^rd, 5^th, ...) jumps in the series are called odd-numbered jumps, and the (2^nd, 4^th, 6^th, ...) jumps in the series are called even-numbered jumps. Note that the jumps are numbered, not the indices.
5 * You may jump forward from index i to index j (with i < j) in the following way:
6 *
7 * During odd-numbered jumps (i.e., jumps 1, 3, 5, ...), you jump to the index j such that arr[i] <= arr[j] and arr[j] is the smallest possible value. If there are multiple such indices j, you can only jump to the smallest such index j.
8 * During even-numbered jumps (i.e., jumps 2, 4, 6, ...), you jump to the index j such that arr[i] >= arr[j] and arr[j] is the largest possible value. If there are multiple such indices j, you can only jump to the smallest such index j.
9 * It may be the case that for some index i, there are no legal jumps.
10 *
11 * A starting index is good if, starting from that index, you can reach the end of the array (index arr.length - 1) by jumping some number of times (possibly 0 or more than once).
12 * Return the number of good starting indices.
13 *
14 * Example 1:
15 *
16 * Input: arr = [10,13,12,14,15]
17 * Output: 2
18 * Explanation:
19 * From starting index i = 0, we can make our 1st jump to i = 2 (since arr[2] is the smallest among arr[1], arr[2], arr[3], arr[4] that is greater or equal to arr[0]), then we cannot jump any more.
20 * From starting index i = 1 and i = 2, we can make our 1st jump to i = 3, then we cannot jump any more.
21 * From starting index i = 3, we can make our 1st jump to i = 4, so we have reached the end.
22 * From starting index i = 4, we have reached the end already.
23 * In total, there are 2 different starting indices i = 3 and i = 4, where we can reach the end with some number of
24 * jumps.
25 *
26 * Example 2:
27 *
28 * Input: arr = [2,3,1,1,4]
29 * Output: 3
30 * Explanation:
31 * From starting index i = 0, we make jumps to i = 1, i = 2, i = 3:
32 * During our 1st jump (odd-numbered), we first jump to i = 1 because arr[1] is the smallest value in [arr[1], arr[2], arr[3], arr[4]] that is greater than or equal to arr[0].
33 * During our 2nd jump (even-numbered), we jump from i = 1 to i = 2 because arr[2] is the largest value in [arr[2], arr[3], arr[4]] that is less than or equal to arr[1]. arr[3] is also the largest value, but 2 is a smaller index, so we can only jump to i = 2 and not i = 3
34 * During our 3rd jump (odd-numbered), we jump from i = 2 to i = 3 because arr[3] is the smallest value in [arr[3], arr[4]] that is greater than or equal to arr[2].
35 * We can't jump from i = 3 to i = 4, so the starting index i = 0 is not good.
36 * In a similar manner, we can deduce that:
37 * From starting index i = 1, we jump to i = 4, so we reach the end.
38 * From starting index i = 2, we jump to i = 3, and then we can't jump anymore.
39 * From starting index i = 3, we jump to i = 4, so we reach the end.
40 * From starting index i = 4, we are already at the end.
41 * In total, there are 3 different starting indices i = 1, i = 3, and i = 4, where we can reach the end with some
42 * number of jumps.
43 *
44 * Example 3:
45 *
46 * Input: arr = [5,1,3,4,2]
47 * Output: 3
48 * Explanation: We can reach the end from starting indices 1, 2, and 4.
49 *
50 *
51 * Constraints:
52 *
53 * 1 <= arr.length <= 2 * 10^4
54 * 0 <= arr[i] < 10^5
55 *
56 */
57pub struct Solution {}
58
59// problem: https://leetcode.com/problems/odd-even-jump/
60// discuss: https://leetcode.com/problems/odd-even-jump/discuss/?currentPage=1&orderBy=most_votes&query=
61
62// submission codes start here
63
64impl Solution {
65 pub fn odd_even_jumps(arr: Vec<i32>) -> i32 {
66 0
67 }
68}
69
70// submission codes end
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75
76 #[test]
77 fn test_975() {
78 }
79}
80
Back
© 2025 bowen.ge All Rights Reserved.