26
loading...
This website collects cookies to deliver better user experience
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]. 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]. The sum is 17. |
Example 3: | |
---|---|
Input: | nums = [1,-5,-20,4,-1,3,-6,-3], k = 2 |
Output: | 0 |
1 <= nums.length, k <= 10^5
-10^4 <= nums[i] <= 10^4
var maxResult = function(nums, k) {
let n = nums.length, deq = [n-1]
for (let i = n - 2; ~i; i--) {
if (deq[0] - i > k) deq.shift()
nums[i] += nums[deq[0]]
while (deq.length && nums[deq[deq.length-1]] <= nums[i]) deq.pop()
deq.push(i)
}
return nums[0]
};
class Solution:
def maxResult(self, nums: List[int], k: int) -> int:
n = len(nums)
deq = deque([n-1])
for i in range(n-2, -1, -1):
if deq[0] - i > k: deq.popleft()
nums[i] += nums[deq[0]]
while len(deq) and nums[deq[-1]] <= nums[i]: deq.pop()
deq.append(i)
return nums[0]
class Solution {
public int maxResult(int[] nums, int k) {
int n = nums.length, a = 0, b = 0;
int[] deq = new int[n];
deq[0] = n - 1;
for (int i = n - 2; i >= 0; i--) {
if (deq[a] - i > k) a++;
nums[i] += nums[deq[a]];
while (b >= a && nums[deq[b]] <= nums[i]) b--;
deq[++b] = i;
}
return nums[0];
}
}
class Solution {
public:
int maxResult(vector<int>& nums, int k) {
int n = nums.size(), a = 0, b = 0;
int deq[n];
deq[0] = n - 1;
for (int i = n - 2; i >= 0; i--) {
if (deq[a] - i > k) a++;
nums[i] += nums[deq[a]];
while (b >= a && nums[deq[b]] <= nums[i]) b--;
deq[++b] = i;
}
return nums[0];
}
};