45. 跳跃游戏 II

贪心算法

package leetcode;

public class demo_45 {
    public int jump(int[] nums) {
        int end=nums.length-1;
        int step=0;
        int far;
        while(end>0) {
            far=end;
            //贪心算法:贪心策略记录每一次离末尾边界最远的点
            for(int i=0;i<end;i++) {
                if(i+nums[i]>=end) {
                    if(i<far) {far=i;}
                }
            }
            step=step+1;
            end=far;
        }
        System.out.println(step);
        return step;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_45 d45=new demo_45();
        int nums[]= {2,3,1,1,4};
        d45.jump(nums);
    }

}

 简化版O(n)

    public int jump(int[] nums) {
        int end=0;
        int step=0;
        int max=0;
        for(int i=0;i<nums.length;i++) {
        //每一次跳跃最远能跳到的距离
            if(i<=end) {
                if(nums[i]+i>max) {
                   max=nums[i]+i;
                }
            }
            else {
                step=step+1;
                end=max;
                max=nums[i]+i;
            }
        }
        System.out.println(step);
        return step;
    }

 

posted on 2021-05-10 22:19  一仟零一夜丶  阅读(37)  评论(0)    收藏  举报