• 给出一组正整数arr,你从第0个数向最后一个数,每个数的值表示你从这个位置可以向右跳跃的最大长度,计算如何以最少的跳跃次数跳到最后一个数。


    问题描述:

            给出一组正整数arr,你从第0个数向最后一个数,每个数的值表示你从这个位置可以向右跳跃的最大长度,计算如何以最少的跳跃次数跳到最后一个数。

    思想:

            假设我们现在已经跳跃到了第四步,那么第五步的边界由第四步边界内各值加上arr数组上对应的最大长度取最大值,即为第五步可以到达的最右边界。

            以下面arr[3, 1,  4, 2, 1, 1, 5, 2, 1, 1]为例,这里有三个变量值分别为:step(表示目前走了几步)、curR(当前step步的右边界)、next(step+1步的右边界)。数组arr的下标用i表示。

    具体流程如下:

    1. i=0时,step=0 curR=0可以满足要求,把此时的next设置为3。【step=0  curR=0  next=3】
    2. i=1时,curR=0不满足条件,step+1,并且把next的值赋值给curR,把此时的next设置为2(先设置为-1,next=i+arr[i]= 1+1=2)。【step=1  curR=3  next=2】
    3. i=2时,curR=3满足条件,step保持不变,i+arr[i]>next (2+4=6>2) 把此时的next设置为6。【step=1  curR=3  next=6】
    4. i=3时,curR=3满足条件,step保持不变,i+arr[i]
    5. i=4时,curR=3不满足条件,step+1,并且把next的值赋值给curR,把此时的next设置为2(先设置为-1,next=i+arr[i]= 4+1=5)。【step=2  curR=6  next=5】
    6. i=5时,curR=6满足条件,step保持不变,i+arr[i]>next (5+1=6>5) 把此时的next设置为6。【step=2  curR=6  next=6】
    7. i=6时,curR=6满足条件,step保持不变,i+arr[i]>next (6+5=11>6) 把此时的next设置为11。【step=2  curR=6  next=11】
    8. i=7时,curR=6不满足条件,step+1,并且把next的值赋值给curR,把此时的next设置为9(先设置为-1,next=i+arr[i]= 7+2=9)。【step=3  curR=11  next=9】
    9. i=8时,curR=11满足条件,step保持不变,i+arr[i]=next (8+1=9=9)next值保持不变。【step=3  curR=11  next=9】
    10. i=9时,curR=11满足条件,step保持不变,i+arr[i]>next (9+1=10>9)把此时的next设置为10。【step=3  curR=11  next=10】
    11. 到达右边界,输出step。

    代码:

    1. public static int jump(int[] arr) {
    2. if (arr == null || arr.length == 0) {
    3. return 0;
    4. }
    5. int step = 0;//跳了多少步
    6. int curR = 0;//step步内,右边界
    7. int next = 0;//step+1步内,右边界
    8. for (int i = 0; i < arr.length; i++) {
    9. if (curR < i) {
    10. step++;
    11. curR = next;
    12. }
    13. next = Math.max(next, i + arr[i]);
    14. }
    15. return step;
    16. }
    17. public static void main(String[] args) {
    18. int[] arr = {3, 1, 4, 2, 1, 1, 5, 2, 1, 1};
    19. System.out.println(jump(arr));
    20. }

  • 相关阅读:
    paddle 复现ResNet模型(只关注模型)
    宁波市第一医院附近的房屋调研
    Tomcat 源码分析 (Tomcat的Session管理之管理持久化Session) (十三)
    uni-app多次触发事件,防止重复点击
    计算机毕业设计JavaNBA篮球资讯网(源码+系统+mysql数据库+lw文档)
    05-React Antd UI库
    一个域名可以对应多个IP吗?如何通过DNS实现?
    leetcode:2678. 老人的数目(python3解法)
    阿里云SLB之:基于多域名调度的SLB七层负载均衡配置(十四)
    【Git】Git 学习笔记_操作远程仓库
  • 原文地址:https://blog.csdn.net/z1171127310/article/details/127943184