假设我们有一个名为 nums 的数组和另一个值 k。我们在索引 0 处。在一次移动中,我们最多可以向右跳 k 步,而不会超出数组的边界。我们想要到达数组的最终索引。对于跳跃,我们得到分数,即我们在数组中访问的每个索引 j 的所有 nums[j] 的总和。我们必须找到我们能得到的最高分。
所以,如果输入像 nums = [1,-2,-5,7,-6,4] k = 2,那么输出将是 10,因为,我们按照这个序列 [1, -2, 7, 4],那么我们将得到最大点,即 10。
让我们看看以下实现以获得更好的理解 -
def solve(nums, k): n = len(nums) scores = [0] * n scores[0] = nums[0] currMax = scores[0] max_pt = 0 if n < 1: return 0 if n == 1: return nums[-1] for idx in range(1,n): if max_pt >= idx - k: if currMax < scores[idx-1] and idx > 0: currMax = scores[idx-1] max_pt = idx-1 else: if idx - k > 0: currMax = scores[idx-k] max_pt = idx - k for p in range(idx-k, idx): if scores[p] >= currMax: max_pt = p currMax = scores[p] scores[idx] = currMax + nums[idx] scores[-1] = currMax + nums[-1] return scores[-1] nums = [1,-2,-5,7,-6,4] k = 2 print(solve(nums, k))
[1,-2,-5,7,-6,4], 2输出结果
10