✿-35例题 贪心算法--跳跃游戏-55

Posted on 2020-12-03 19:15  MissRong  阅读(120)  评论(0)    收藏  举报

✿-35例题 贪心算法--跳跃游戏-55

一、题目

 

 二、Java代码实现

package shuJuJieGou.ShuZuAndHash;

/**
 * @Author : ASUS and xinrong
 * @Version : 2020/12/2 & 1.0
 * 贪心
 * 跳跃游戏-55
 */
public class JumpGame {
    /**
     * 解法一:贪心算法
     * 思路:
     *  对于当前遍历到的位置 x,如果它在最远可以到达的位置的范围内,
     *  那么就可以从起点通过若干次跳跃到达该位置,
     *  因此可以用 x+nums[x] 试着更新最远可以到达的位置。
     *  在遍历的过程中,如果最远可以到达的位置大于等于数组中的最后一个位置,
     *  那就说明最后一个位置可达,就可以直接返回 true 作为答案。
     * @param nums
     * @return
     * 复杂度分析:
     *  时间复杂度:O(n),其中 n为数组的大小。
     *  空间复杂度:O(1),不需要额外的空间开销。
     */
    public boolean canJump(int[] nums) {
        //用max记录能到达的最远位置
        int max = 0;
        //从头开始遍历
        for(int i = 0; i < nums.length; i++){
            //如果当前位置小于等于可达的最远位置
            //就是说要确保之前的最远位置能走到当前位置,不然即使他更大也不奏效
            if(i <= max){
                //可以试着更新最远可达位置
                max = Math.max(max, i + nums[i]);
                //满足条件直接退出,不需要再遍历后续位置
                if(max >= nums.length - 1){
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        JumpGame tiaoShuZu = new JumpGame();
        boolean jump = tiaoShuZu.canJump(new int[]{2, 3, 1, 1, 4});
        boolean jump2 = tiaoShuZu.canJump(new int[]{3, 2, 1, 0, 4});
        System.out.println(jump);
        System.out.println(jump2);
    }
}

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3