leetcode 55. 跳跃游戏

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

示例 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)应该是最少了,然后代码量也比别人的少一些哈哈。继续努力咯~

算法梦想家,来跟我一起玩算法,玩音乐,聊聊文学创作,咱们一起天马行空!
《leetcode 55. 跳跃游戏》

    原文作者:算法瘾士
    原文地址: https://segmentfault.com/a/1190000018897141
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞