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

leetcode hot100跳跃游戏Ⅱ

在这里插入图片描述
本题和上一题还是有不一样的地方,这个题中,我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。

那么我们还是采用覆盖范围的概念,但是我们需要两个,一个是在当前位置的覆盖范围,另一个是下一步的覆盖范围。

当我们位于当前位置,我们计算我们可以走到的最大覆盖范围,如果最大覆盖范围大于等于nums.length-1,也就是说我们在当前位置,再走一步,就可以到达数组的终点,那么此时直接步数加一,然后跳出循环即可。

如果我们当前位置,发现最大覆盖范围没有到达重点,那么我们应该继续往下走,往下走的时候,我们就需要计算,下一步无论是往后走几步,我们要找到下一步走完之后的最大覆盖范围,然后把这个值给当前的覆盖范围,然后步数加一,这样就说明,我们在步数加一的情况下,我们可以走到的最远距离!

本题和上一题不一样的点在于,上一个题我们只需要找最大的覆盖范围即可,所以我遍历的时候,是在覆盖范围内遍历,这个题是要找最小的步数,我们需要数组中每个元素都遍历,然后根据当前元素的值去改变最大覆盖范围,如果超过了数组的索引最大值,那么说明再走一步肯定能到最后(注意,可能不是从当前位置走的,可能是当前位置前一个位置,因为我们不关心走的路线,只关心最大范围!)。如果当前的最大范围和数组下标i相等了,说明我们当前走到的位置还到不了数组最后终点,还需要再往后走,然后我们往后走,那么最大覆盖范围肯定变化了,就把这个最大覆盖范围给当前覆盖范围,继续用i和当前覆盖范围比较!

class Solution {public int jump(int[] nums) {if (nums == null || nums.length == 0 || nums.length == 1) {return 0;}//记录跳跃的次数int count=0;//当前的覆盖最大区域int curDistance = 0;//最大的覆盖区域int maxDistance = 0;for (int i = 0; i < nums.length; i++) {//在可覆盖区域内更新最大的覆盖区域maxDistance = Math.max(maxDistance,i+nums[i]);//说明当前一步,再跳一步就到达了末尾if (maxDistance>=nums.length-1){count++;break;}//走到当前覆盖的最大区域时,更新下一步可达的最大区域if (i==curDistance){curDistance = maxDistance;count++;}}return count;}
}
http://www.lryc.cn/news/291408.html

相关文章:

  • 大数据期望最大化(EM)算法:从理论到实战全解析
  • 【鸿蒙】大模型对话应用(二):对话界面设计与实现
  • MySQL 导入数据
  • 探索数字经济:从基础到前沿的奇妙旅程
  • 【INTEL(ALTERA)】如何在 Windows 操作系统上设置 Design Space Explorer II 远程 SSH 场
  • Python编程-使用urllib进行网络爬虫常用内容梳理
  • 01 Redis的特性+下载安装启动+Redis自动启动+客户端连接
  • C++发起Https请求
  • 哪款笔记软件支持电脑和手机互通数据?
  • 部署PXE高效批量网络装机
  • 【JavaEE】UDP协议与TCP协议
  • Leetcode—1828. 统计一个圆中点的数目【中等】
  • 新概念英语第二册(47)
  • 抽象类(Java)、模板方法设计模式
  • 【Delphi】IDE 工具栏错乱恢复
  • 自动化报告的前奏|使用python-pptx操作PPT(一)
  • 2024美赛数学建模D题思路+代码
  • JDBC 结构优化2
  • 大模型相关术语
  • 数据库之九 流程控制、存储过程和函数
  • DolphinDB学习(2):增删改查数据表(分布式表的基本操作)
  • 100天精通Python(实用脚本篇)——第114天:基于smtplib与email模块实现收发邮件(附上多个案例代码)
  • redisTemplate.opsForValue()
  • 多线程事务如何回滚?
  • 医院如何筛选安全合规的内外网文件交换系统?
  • C51 单片机学习(一):基础外设
  • Docker容器引擎镜像创建
  • 布尔逻辑与逻辑门
  • opencv-python计算视频光流
  • Spring 中获取 Bean 对象的三种方式