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

发布时间:2024年01月20日

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?作为结果。

文章来源:https://blog.csdn.net/weixin_47420447/article/details/135709906
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。