当前位置: 首页 > news >正文

贪心算法---跳跃游戏(2)

题目:

给定一个长度为 n0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

思路:

从覆盖范围出发,不管怎么跳,覆盖范围内一定可以跳到,以最小步数增加覆盖范围,覆盖范围一旦覆盖了终点得到的就是最小步数。

统计两个覆盖范围,当前这一步的最大覆盖范围和下一步最大覆盖范围。如果移动下标到了当前这一步的最大覆盖最远距离,还没有到达终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。

有一个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时,如果当前覆盖最远距离下表不是集合终点,步数加一,还要继续走;如果当前覆盖最远距离下标是集合终点,部署不用加一,因为不能再往后走了。

代码:

    public int jump(int[] nums) {if(nums.length==1) return 0;//数组只有一个元素,不用跳跃int curDistance=0;//当前覆盖的最远距离下标int ans=0;//记录走的步数int nextDistance=0;//下一步覆盖最远距离下标for(int i=0;i<nums.length;i++){nextDistance=Math.max(nums[i]+i,nextDistance);//更新下一步覆盖最远距离下标if(i==curDistance){//遇到当前覆盖最远距离下标ans++;//需要走下一步curDistance=nextDistance;//更新当前覆盖的最远距离下标if(nextDistance>=nums.length-1) break;//当前覆盖范围包含终点,直接结束}}return ans;}


http://www.mrgr.cn/news/10008.html

相关文章:

  • <数据集>骨折检测数据集<目标检测>
  • avue-crud 是基于 Vue.js 的一个高度封装的表格(CRUD)组件库
  • easyExcel 导入时,校验每个单元格数据
  • VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路
  • 记一个坑-list.addAll()后,修改新list的内容,旧list也会跟着改
  • 机器学习-32-机器学习的进阶路径
  • 树莓派5安装系统并配置SSH与VNC权限实现Windows设备远程连接
  • 为什么互联网上要设立防火墙?WAF又是什么?
  • 系统架构设计师 - 软件工程(3)
  • 关闭spirng boot集成springdoc-openapi的接口文档
  • PHP 7.4.21 development server 源码泄露漏洞复现
  • python中selenium自动化爬取
  • Python测试框架之—— pytest介绍与示例
  • Vue3通信方式 插槽
  • ssrf简介
  • linux qt编写串口软件
  • 鸿蒙卡片服务开发
  • 实现简易 React SSR 框架
  • CSS详知识点——CSS变形
  • 超分 Real-ESRGAN 使用笔记