【leetcode】1696. Jump Game VI
题目如下:
You are given a 0-indexed integer array
numsand an integerk.You are initially standing at index
0. In one move, you can jump at mostksteps forward without going outside the boundaries of the array. That is, you can jump from indexito 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 allnums[j]for each indexjyou 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: 0Constraints:
1 <= nums.length, k <= 105
-104 <= nums[i] <= 104
解题思路:动态规划,要求跳到第i个位置的最大值,只需要找出i-1~i-k区间的最大值即可。
代码如下:
class Solution(object): def maxResult(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int """ import bisect dp = [0] * len(nums) dp[0] = nums[0] val = [dp[0]] for i in range(1,len(nums)): dp[i] = val[-1] + nums[i] bisect.insort_left(val,dp[i]) if len(val) > k: inx = bisect.bisect_left(val,dp[i-k]) del val[inx] #print dp return dp[-1]
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号