g1301_1400.s1340_jump_game_v.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1301_1400.s1340_jump_game_v;
// #Hard #Array #Dynamic_Programming #Sorting #2022_03_19_Time_13_ms_(71.33%)_Space_47.7_MB_(46.67%)
/**
* 1340 - Jump Game V\.
*
* Hard
*
* Given an array of integers `arr` and an integer `d`. In one step you can jump from index `i` to index:
*
* * `i + x` where: `i + x < arr.length` and `0 < x <= d`.
* * `i - x` where: `i - x >= 0` and `0 < x <= d`.
*
* In addition, you can only jump from index `i` to index `j` if `arr[i] > arr[j]` and `arr[i] > arr[k]` for all indices `k` between `i` and `j` (More formally `min(i, j) < k < max(i, j)`).
*
* You can choose any index of the array and start jumping. Return _the maximum number of indices_ you can visit.
*
* Notice that you can not jump outside of the array at any time.
*
* **Example 1:**
*
* ![](https://assets.leetcode.com/uploads/2020/01/23/meta-chart.jpeg)
*
* **Input:** arr = [6,4,14,6,8,13,9,7,10,6,12], d = 2
*
* **Output:** 4
*
* **Explanation:** You can start at index 10. You can jump 10 --> 8 --> 6 --> 7 as shown. Note that if you start at index 6 you can only jump to index 7. You cannot jump to index 5 because 13 > 9. You cannot jump to index 4 because index 5 is between index 4 and 6 and 13 > 9. Similarly You cannot jump from index 3 to index 2 or index 1.
*
* **Example 2:**
*
* **Input:** arr = [3,3,3,3,3], d = 3
*
* **Output:** 1
*
* **Explanation:** You can start at any index. You always cannot jump to any index.
*
* **Example 3:**
*
* **Input:** arr = [7,6,5,4,3,2,1], d = 1
*
* **Output:** 7
*
* **Explanation:** Start at index 0. You can visit all the indicies.
*
* **Constraints:**
*
* * `1 <= arr.length <= 1000`
* * 1 <= arr[i] <= 105
* * `1 <= d <= arr.length`
**/
public class Solution {
public int maxJumps(int[] arr, int d) {
int n = arr.length;
int[] dp = new int[n];
int jumps = 0;
for (int i = 0; i < n; i++) {
jumps = Math.max(jumps, helper(arr, d, i, dp));
}
return jumps;
}
private int helper(int[] arr, int d, int i, int[] dp) {
int temp = 0;
if (dp[i] != 0) {
return dp[i];
}
int l = Math.max(0, i - d);
int r = Math.min(i + d, arr.length - 1);
for (int j = i - 1; j >= l && arr[i] > arr[j]; j--) {
temp = Math.max(temp, helper(arr, d, j, dp));
}
for (int j = i + 1; j <= r && arr[i] > arr[j]; j++) {
temp = Math.max(temp, helper(arr, d, j, dp));
}
return 1 + temp;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy