83、★★贪心-LeetCode-55.跳跃游戏

题目描述:

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

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

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

思路:

感觉贪心的算法都不长,但是需要找到贪心的点!

这道题就是将能够到达的位置,每次贪心的取到最远位置,看能不能到达最尾部!

自己的思路在考虑能不能 越过 0的位置,不容易想

代码:

1)保留下自己的思路:

想不到i这里怎么处理:

想到了 i 要按照他自己能够到达的位置 作为限制条件;

但是没有想到实时更新最大可到达返回,这里就是贪心!

class Solution {
    //落在0位置上就会false;
    //只要不会经过0位置,就不会出问题!
    public boolean canJump(int[] nums) {
        for(int i = 0;i < nums.length;i++){
            for(int j = i;j <= i + nums[i] && j < nums.length;j++){
                if(nums[j] == 0 && j != nums.length - 1) return false;
            }
        }
        return true;
    }
}

2)贪心算法

class Solution {
    //落在0位置上就会false;
    //只要不会经过0位置,就不会出问题!
    public boolean canJump(int[] nums) {
        if(nums.length == 1) return true;
        //按照覆盖范围来进行;
        //之前自己按照能不能越过0,不好写
        int cover = 0;//也就是能够到达位置的下标
        //每次更新所能到达的位置的最大下标
        for(int i = 0;i <= cover;i++){
            cover = Math.max(cover,i + nums[i]);
            //能够到尾部!
            if(cover >= nums.length - 1) return true;
        }
        return false;
    }
}

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