All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1601_1700.s1696_jump_game_vi.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1601_1700.s1696_jump_game_vi;

// #Medium #Array #Dynamic_Programming #Heap_Priority_Queue #Sliding_Window #Queue #Monotonic_Queue
// #2022_04_13_Time_23_ms_(86.05%)_Space_56.4_MB_(95.27%)

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 1696 - Jump Game VI\.
 *
 * Medium
 *
 * You are given a **0-indexed** integer array `nums` and an integer `k`.
 *
 * You are initially standing at index `0`. In one move, you can jump at most `k` steps forward without going outside the boundaries of the array. That is, you can jump from index `i` to any index in the range `[i + 1, min(n - 1, i + k)]` **inclusive**.
 *
 * You want to reach the last index of the array (index `n - 1`). Your **score** is the **sum** of all `nums[j]` for each index `j` you visited in the array.
 *
 * Return _the **maximum score** you can get_.
 *
 * **Example 1:**
 *
 * **Input:** nums = [1,\-1,-2,4,-7,3], k = 2
 *
 * **Output:** 7
 *
 * **Explanation:** You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7.
 *
 * **Example 2:**
 *
 * **Input:** nums = [10,-5,-2,4,0,3], k = 3
 *
 * **Output:** 17
 *
 * **Explanation:** You can choose your jumps forming the subsequence [10,4,3] (underlined above). The sum is 17.
 *
 * **Example 3:**
 *
 * **Input:** nums = [1,-5,-20,4,-1,3,-6,-3], k = 2
 *
 * **Output:** 0
 *
 * **Constraints:**
 *
 * *   1 <= nums.length, k <= 105
 * *   -104 <= nums[i] <= 104
**/
public class Solution {
    public int maxResult(int[] nums, int k) {
        Deque deque = new ArrayDeque<>();
        deque.offer(new int[] {0, nums[0]});
        for (int i = 1; i < nums.length; i++) {
            int max = deque.peek()[1];
            int[] next = new int[] {i, max + nums[i]};
            while (!deque.isEmpty() && deque.peekLast()[1] <= next[1]) {
                // PURGE FROM THE END
                deque.pollLast();
            }
            deque.offer(next);
            if (deque.peekFirst()[0] <= i - k) {
                // PURGE FROM THE HEAD
                deque.pollFirst();
            }
        }
        return deque.peekLast()[1];
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy