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

leetcode45 跳跃游戏II

题目

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

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

示例

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

解析

这道题和『跳跃游戏I』不同的就是上道题求能不能跳到终点,这道题求最小几步能跳到终点。
在遍历数组的时候,不必要访问数组的最后一个元素,因为题目保证了一定能跳到最后一个位置,那我们在访问最后一个元素的时候,我们的边界一定是大于等于最后一个元素。如果访问最后一个元素,在边界恰好为最后一个位置的情况下,会增加一次次数(解释的是下面代码中i < n-1的逻辑)。
举个例子:2,3,1,1,4 这个数组,开始的时候2可以跳到3或1的位置,假如跳到3,则又可以直接跳到终点,只需要两步即可;如果是i <= n-1的话,在n-1的位置又要算一下,然后命中step++,结果就不对了

func jump(nums []int) int {n := len(nums)maxPosition := 0 // 最大可跳步数end := 0         // 边界step := 0for i := 0; i < n-1; i++ { // 这里要小于n-1maxPosition = max(maxPosition, i+nums[i])if i == end { // 每次到边界,就将边界更新成最大可跳步数,并将步数+1end = maxPositionstep++}}return step
}
http://www.lryc.cn/news/378032.html

相关文章:

  • 【数学】什么是方法矩估计?和最大似然估计是什么关系?
  • C++初学者指南第一步---10.内存(基础)
  • 扩散模型详细推导过程——编码与解码
  • js如何实现开屏弹窗
  • C#——文件读取Directory类详情
  • Ruby on Rails Post项目设置网站初始界面
  • 03-QTWebEngine中使用qtvirtualkeyboard
  • leetcode3无重复字符的最长字串(重点讲滑动窗口)
  • Gobject tutorial 八
  • DDMA信号处理以及数据处理的流程---cfar检测
  • 【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
  • Zookeeper 集群节点故障剔除、切换、恢复原理
  • 解决帝国cms栏目管理拼音乱码的问题
  • Git快速入门
  • 【18.0】JavaScript---事件案例
  • 推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你
  • Kafka之ISR机制的理解
  • 如何设计一个点赞系统
  • 对象存储测试工具-s3cmd
  • OpenCV--图像色彩空间及转换
  • RIP解决不连续子网问题
  • 动态轮换代理IP是什么?有什么用?
  • MAC配置VScode中C++项目debug环境
  • PostgreSQL源码分析——CREATE CAST
  • 解锁5G新营销:视频短信的优势与全方位推广策略
  • 视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台
  • PostgreSQL查询用户
  • 力扣1539.第k个缺失的正整数
  • 如何快速解决屏幕适配问题
  • Go基础编程 - 09 - 通道(channel)