【贪心算法】之跳跃游戏

问题:

给定一个非负整数数组 [nums] ,开始时位于数组的初始位置 ,数组中每个下标对应的元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达数组的最后位置。

**思路:**贪心算法

看不懂的可以去下面这个链接看 具体思路

贪心算法中的经典题目 跳跃游戏 (LeetCode 55)_哔哩哔哩_bilibili]
(https://www.bilibili.com/video/BV1Sk4y1C7cD?spm_id_from=333.337.search-card.all.click)

若是数组中的每一个元素值都大于0,无论怎么跳都可以到达最后的位置;

index是我们下一跳要跳到的最佳位置;

如下例所示,我们每次在 i 位置上可以跳跃到的最大位置max_jump= i+nums[i] ;当在 i=0上时候,我们可以最多跳四步,可以到 i=1,i=2,i=3,i=4;

那哪个位置最好呢,我们可以看到 i=1,2,3,4位置下对应的max_jump=5,4,6,5;显然i=3时候,max_jump最大,可以跳到6的位置,所以index=3;因为i=3,可以跳到最大位置6,其他 i对应的最大位置,i=3,都可以跳到;

//数组跳跃
public class One {
   
    public static void main(String[] args) {
   
        int[] arr = {
   2, 3, 4, 0, 0, 0, 0, 2};
        ArrayList<Integer> list = new ArrayList<>();
        System.out.println(can(arr, list));
    }
    public static boolean can(int[] arr, ArrayList<Integer> list) {
   
        //先把计算出来的jump 即:每次最多可以跳得的最大位置存起来
        for (int i = 0; i < arr.length; i++) {
   
            list.add(i + arr[i]);//jump=i+arr[i]
        }
        int index = 1;//初始化索引 可以从1开始
        int max_jump = list.get(0);
        while (index < arr.length && index <= max_jump) {
   //当index达到数组尾部 或者超过max时,循环结束
            //index>max的话,说明此时索引已经超出你能跳跃的范围 循环也就终止了
            if (list.get(index) > max_jump) {
   
                max_jump=list.get(index);
            }
            index++;//继续后移
        }
        //循环结束时候判断index与数组长度大小关系 若相等则说明该问题有解 可以跳跃到最后
        if (index==arr.length){
   
            return true;
        }
        return false;
    }
}
//2.优化以后的代码

//重新整理了一下思路,只要max_jump>=数组的最大下标我们就可以跳过去
package 算法.贪心算法;

public class ArrJumpBetter {
   
    public static void main(String[] args) {
   
        int[] arr={
   2,3,5,0,0,0,0,2,0,0};
        System.out.println(isCan(arr));

    }
    public static boolean isCan(int[] arr){
   
        if (arr.length==1){
   
            return true;
        }
        int max_jump=0;
        //只要max_jump可以覆盖到数组的长度大小就说明可以跳过去
        for (int i = 0; i <=max_jump ; i++) {
   
            max_jump=Math.max(max_jump,i+arr[i]);
            if (max_jump>=arr.length-1){
   
                return true;
            }
        }
        return false;
    }
}

相关推荐

  1. 贪心算法-跳跃游戏

    2023-12-19 06:46:03       36 阅读
  2. leetcode—跳跃游戏贪心算法

    2023-12-19 06:46:03       59 阅读
  3. 贪心算法 股票 跳跃游戏1and2

    2023-12-19 06:46:03       29 阅读
  4. 买卖股票+跳跃游戏 贪心算法

    2023-12-19 06:46:03       29 阅读
  5. 贪心算法】Leetcode 55. 跳跃游戏【中等】

    2023-12-19 06:46:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 06:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 06:46:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 06:46:03       82 阅读
  4. Python语言-面向对象

    2023-12-19 06:46:03       91 阅读

热门阅读

  1. webpack总结

    2023-12-19 06:46:03       63 阅读
  2. Cmake基础(7)

    2023-12-19 06:46:03       46 阅读
  3. 【Leetcode】计算器

    2023-12-19 06:46:03       64 阅读
  4. 数据的输入输出(C++)

    2023-12-19 06:46:03       58 阅读
  5. Docker (Dockerfile运行jar) -day 05

    2023-12-19 06:46:03       64 阅读
  6. .net web API的文件传输(上传和下载)客户端winform

    2023-12-19 06:46:03       48 阅读
  7. 【Node】npm使用手册

    2023-12-19 06:46:03       60 阅读
  8. 文件相关工具类Utils(WORD,PDF,PNG)

    2023-12-19 06:46:03       53 阅读
  9. 第六章--- 实现微服务:匹配系统(下)

    2023-12-19 06:46:03       40 阅读