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

(贪心) LeetCode 45. 跳跃游戏 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]。

示例 1:

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

输入: nums = [2,3,0,1,4]
输出: 2
 

提示:

1 <= nums.length <= 104
0 <= nums[i] <= 1000
题目保证可以到达 nums[n-1]

二. 解题思路

本题相较于上一题跳跃游戏1的话,还是有很大的区别的,上一题意在判断能否到达终点,我们只需要判断当前位置加上当前位置可跳跃的步数能否到达终点即可,而本题需要选择是最短的跳跃步数到达终点,所以我们得利用贪心的思想好好想一下,如何才能利用最少的步数达到跳跃的距离最大呢。

其实不难想出,我们在每走到一个点的时候将改点记录下来,然后再使用一个next 变量记录当前点所能到达的最大距离,然后开始遍历该点的覆盖范围,找出next 的最大值,即在覆盖范围内能走到的最大距离,如果当i == cover 的时候,说明我们已经将该点的覆盖范围内的最大值找到,然后就得判断当前覆盖范围与终点(n - 1)的大小了。

(1)如果小于,说明在该店是无法到达终点的,我们就得多走一步,此时的res 就得做加一操作,然后将的得到的next 值再赋给cover ,如果发现cover >= n - 1,说明此时可以到达终点,直接break 即可。 

(2)如果大于等于,说明可以到达终点,直接break 即可。

最后只需要返回res 的值即可。

一下是代码随想录中的一个代码执行流程图,大家可以参考

话不多说!!!上代码!!

三. 代码

class Solution {
public:int jump(vector<int>& nums) {int cover = 0;int n = nums.size();int res = 0;int next = 0;for(int i = 0; i < n; i++){next = max(next, i + nums[i]);if(i == cover){if(cover < n - 1){res++;cover = next;if(cover >= n - 1){break;}}else break;}}return res;}
};

四. 总结

本题相较于之前的题比较有难度,建议大家可以多加练习。

时间复杂度:O(n);

空间复杂度:O(1)。

喜欢的话给个关注吧!!

相关文章:

  • pandas and sqlalchemy compatibility
  • Open3D 最近点约束的体素滤波(35)
  • 手动与自动修复mfc140u.dll丢失的解决方法,mfc140u.dll在电脑中是什么样的存在
  • PLINQ:C#中并行查询的加速引擎
  • 会话跟踪方案:Cookie Session Token
  • 9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)
  • 巡检机器人的使用方法和维护保养
  • 矢量数据创建
  • VUE学习笔记 2
  • ElasticSearch 8.15.0 与 Kibana 8.15.0 尝鲜体验
  • 2 种方式申请免费 SSL 证书,阿里云 Certbot
  • CSS\JS实现页面背景气泡logo上浮效果
  • 【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池
  • rufus制作启动U盘启动/刻盘
  • 一些近期用的Linux命令
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【面试系列】之二:关于js原型
  • ES6之路之模块详解
  • ES学习笔记(12)--Symbol
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Linux中的硬链接与软链接
  • miaov-React 最佳入门
  • Puppeteer:浏览器控制器
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React系列之 Redux 架构模式
  • Solarized Scheme
  • Terraform入门 - 1. 安装Terraform
  • 半理解系列--Promise的进化史
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 构建二叉树进行数值数组的去重及优化
  • 模型微调
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何选择开源的机器学习框架?
  • 深入浅出webpack学习(1)--核心概念
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 手写一个CommonJS打包工具(一)
  • 思考 CSS 架构
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #define 用法
  • #Linux(权限管理)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.ajax()
  • (2)空速传感器
  • (3)STL算法之搜索
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (编译到47%失败)to be deleted
  • (函数)颠倒字符串顺序(C语言)