leetcode 55. 跳跃游戏

算法瘾士 · · 2849 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例 2:

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

这道题是刚刚做的,可以用贪心的思路。
我分享这道题的原因是因为它更适合反过来想。我们可以从数组的倒数第二个个元素看起,每次往前遍历,如果当前的元素能够到达最后一个位置,那么我们把当前位置开始到最后全部“切断”,以当前元素为最后一个元素,重复第一次的过程就好了。而最后,如果我们遍历到数组的第一个元素,那么此题返回true,否则,你懂得。

话说再少都嫌多,上代码才是王道:

func canJump(nums []int) bool {
    l := len(nums) - 1
    for i := l-1; i >=0 ; i-- {
        if nums[i]+i >= l {
            l = i
        }
    }
    return l <= 0
}

代码不长,应该就不用注释了。其实这次的代码整体来说我是比较满意的。因为时间复杂度O(n)应该是最少了,然后代码量也比别人的少一些哈哈。继续努力咯~

算法梦想家,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!
图片描述


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:算法瘾士

查看原文:leetcode 55. 跳跃游戏

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2849 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传