Jump Game VI
Last updated
Last updated
class Solution {
public int maxResult(int[] nums, int k) {
int[] dp = new int[nums.length];
dp[0] = nums[0];
// 单调递减队列,维持最大值的index
Deque<Integer> mDeque = new ArrayDeque<>();
mDeque.offerFirst(0);
for (int i = 1; i < dp.length; ++i) {
int maxIndex = mDeque.peekLast();
dp[i] = dp[maxIndex] + nums[i];
while (!mDeque.isEmpty() && dp[mDeque.peekFirst()] < dp[i]) {
mDeque.pollFirst();
}
mDeque.offerFirst(i);
if (i - k == mDeque.peekLast()) {
mDeque.pollLast();
}
}
return dp[dp.length - 1];
}
}