力扣每日一练(24-1-20)

力扣每日一练(24-1-20)_第1张图片

Python:

class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        if n < 2:
            return 0
        maxReach, step, end = nums[0], 1, nums[0]
        for i in range(1, n):
            if i > end:
                step += 1
                end = maxReach
            maxReach = max(maxReach, nums[i] + i)
        return step

maxReachstep 和 end 有以下的作用:

  1. maxReach:这个变量用来记录从当前位置开始,我们能够跳到的最远的位置。在每一步中,我们都会更新 maxReach 为当前的 maxReach 和 nums[i] + i 中的较大值,其中 i 是当前的位置,`nums[i] 是当前位置的值,也就是我们能够跳跃的最大长度。

  2. step:这个变量用来记录我们需要跳跃的次数。每当我们到达当前跳跃的结束位置时,我们就知道我们必须进行另一次跳跃,所以 step 会增加 1。

  3. end:这个变量用来记录当前跳跃的结束位置。每当我们到达 end,我们就知道我们必须进行另一次跳跃,并更新 end 为 maxReach,也就是我们能够到达的最远位置。

这三个变量共同帮助我们确定在每一步中应该跳到哪个位置,以便我们能够以最少的跳跃次数到达数组的最后一个位置。

C#

public int Jump(int[] nums) {
    int n = nums.Length;
    if (n < 2) {
        return 0;
    }
    int maxReach = nums[0], step = 1, end = nums[0];
    for (int i = 1; i < n; i++) {
        if (i > end) {
            step++;
            end = maxReach;
        }
        maxReach = Math.Max(maxReach, nums[i] + i);
    }
    return step;
}

        我们首先检查 nums 的长度是否小于 2,如果是,那么就返回 0,因为我们已经在目标位置。然后,我们初始化 maxReachstep 和 end 为 nums[0],并从 nums 的第二个元素开始遍历。如果我们到达了当前跳跃的结束位置,那么就增加 step,并更新 end 为 maxReach。然后,我们更新 maxReach 为当前的 maxReach 和 nums[i] + i 中的较大值。最后,我们返回 step 作为结果。

你可能感兴趣的:(leetcode,python,算法)