leetcode——55.跳跃游戏

顺利完成!

思路:

  先找0的位置;

  判断是否可以跳过位置0。

public boolean canJump(int[] nums) {
        int n = nums.length;
        if(n <=1){
            return true;
        }
        if(nums[0] == 0){
            return false;
        }
        for(int i = 0;i<n-1;i++){
            if(nums[i] == 0){
                int index = i;
                index --;
                while(index >= 0){
                    if(nums[index]> i - index){
                        break;
                    }else{
                        index--;
                    }
                }
                if(index == -1){
                    return false;
                }
            }
        }
        return true;
    }

public boolean canJump(int[] nums) {
        int n = nums.length;
        int reach = 1;
        for(int i = 0;i<reach && reach<n;i++){
            reach = Math.max(reach,i+1+nums[i]);
        }
        return reach >=n;
    }

public boolean canJump(int[] nums) {
        int n = nums.length;
        if(n == 0) return true;
        int left_most = n-1;
        for(int i = n-2;i>=0;i--){
            if(i + nums[i] >= left_most){
                left_most = i;
            }
        }
        return left_most == 0;
    }

public boolean canJump(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        for(int i = 1;i<n;i++){
            f[i] = Math.max(f[i-1],nums[i-1]) - 1;  //从第0层出发,走到nums[i]时,剩余的最大步数
            if(f[i] < 0) return false;
        }
        return f[n-1] >= 0;
    }

——2020.8.4

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/13432435.html