前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >贪心——55. 跳跃游戏

贪心——55. 跳跃游戏

作者头像
向着百万年薪努力的小赵
发布2022-12-02 11:15:58
2240
发布2022-12-02 11:15:58
举报
文章被收录于专栏:小赵的Java学习小赵的Java学习

1 题目描述

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

2 题目示例

示例 1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2: 输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/jump-game

3 题目提示

1 <= nums.length <= 3 * 104 0 <= nums[i] <= 105

4 思路

设想一下,对于数组中的任意一个位置y,我们如何判断它是否可以到达y根据题目的描述,只要存在一个位置x,它本身可以到达,并且它跳跃的最大长度为x + nums[x],这个值大于等于y,即x+ nums[x] ≥y,那么位置y 也可以到达。 换句话说,对于每一个可以到达的位置x,它使得x+1, x+2,… ,+ nums[x]这些连续的位置都可以到达。 这样一来,我们依次遍历数组中的每一个位置,并实时维护最远可以到达的位置。对于当前遍历到的位置x,如果它在最远可以到达的位置的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用x+ nums[x]更新最远可以到达的位置。 在遍历的过程中,如果最远可以到达的位置大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就可以直接返回True作为答案。反之,如果在遍历结束后,最后一个位置仍然不可达,我们就返回False作为答案。 以题目中的示例一 [2,3,1,1,4] 为例:

  • 我们—开始在位置0,可以跳跃的最大长度为2,因此最远可以到达的位置被更新为2;
  • 我们遍历到位置1,由于1≤2,因此位置1可达。我们用1加上它可以跳跃的最大长度3,将最远可以到达的位置更新为4。由于4大于等于最后一个位置4,因此我们直接返回True 。

我们再来看看题目中的示例二 [3, 2, 1, 0, 4]

  • 我们—开始在位置0,可以跳跃的最大长度为3,因此最远可以到达的位置被更新为3;
  • 我们遍历到位置1,由于1≤3,因此位置1可达,加上它可以跳跃的最大长度⒉得到3,没有超过最远可以到达的位置;
  • 位置2、位置3同理,最远可以到达的位置不会被更新
  • 我们遍历到位置4,由于4 > 3,因此位置4不可达,我们也就不考虑它可以跳跃的最大长度了。

在遍历完成之后,位置4仍然不可达,因此我们返回False 。

复杂度分析

  • 时间复杂度:O(n),其中n为数组的大小。只需要访问nums数组—遍,共n个位置。
  • 空间复杂度:O(1),不需要额外的空间开销。

5 我的答案

代码语言:javascript
复制
public class Solution {
    public boolean canJump(int[] nums) {
        int n = nums.length;
        int rightmost = 0;
        for (int i = 0; i < n; ++i) {
            if (i <= rightmost) {
                rightmost = Math.max(rightmost, i + nums[i]);
                if (rightmost >= n - 1) {
                    return true;
                }
            }
        }
        return false;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 题目描述
  • 2 题目示例
  • 3 题目提示
  • 4 思路
  • 5 我的答案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档