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

力扣HOT100之贪心算法:45. 跳跃游戏 II


这道题刷代码随想录的时候也刷过,本来以为有了上一题55.跳跃游戏的基础,这道题会好做一点,但是依旧想不出来思路,回去看了下自己当时写的博客,没想到今天的感受和当时的感受都一模一样。。。What can I say?看了下代码随想录的视频和灵神的题解,终于把这个问题彻底弄清楚了。
由于这道题保证一定能跳到终点,所以我们只需要考虑如何花最少的次数跳到终点,这里我们定义resultcurrentnext三个变量,result用于记录最小跳跃次数,current代表本次跳跃后所能达到的覆盖范围的最远边界,next代表下一次跳跃所能达到的最远覆盖范围,然后用一个for循环来遍历nums的元素,当我们遍历到current处,则说明我们已经达到了当前覆盖范围的边界,我们需要先判断是否已经到达数组的边界,如果还没到达,则当前是已经到达覆盖范围边界但是尚未达到数组的边界。我们必须跳跃一次,并将current移动到下一次跳跃后的覆盖范围的边界,即current = next;result++;;当进入下一轮for循环时,则i进入下次跳跃的覆盖范围,我们再不断地更新下下次跳跃的最远覆盖范围,即next = max(next, i + nums[i]);。如果i已经到达了数组边界,则无需进行下一次跳跃,直接退出循环即可。

class Solution {
public:int jump(vector<int>& nums) {int current = 0;  //记录当前所在的位置int result = 0;   //记录最小次数int next = 0;for(int i = 0; i < nums.size(); i++){next = max(next, i + nums[i]);   //更新最大覆盖范围if(i == current){  //已经到达覆盖范围边界,需要进行一次跳跃,直接跳到下一个最大覆盖范围的边界if(i != nums.size() - 1){  //已经到达覆盖范围边界但是尚未达到数组的边界result++;current = next;}}}return result;}
};
http://www.xdnf.cn/news/13595.html

相关文章:

  • 零基础设计模式——行为型模式 - 备忘录模式
  • 前端实现ios26最新液态玻璃效果!
  • Leetcode-11 2 的幂
  • 前端实战:用 HTML+JS 打造可拖动图像对比滑块,提升视觉交互体
  • Reactive-Resume:重构你的简历编写体验
  • window 显示驱动开发-如何查询视频处理功能(六)
  • (LeetCode 动态规划(基础版) )337. 打家劫舍 III (深度优先搜索dfs)
  • 智慧医疗能源事业线深度画像分析(下)
  • window 显示驱动开发-创建视频处理设备
  • android studio底部导航栏
  • Windows 上安装 devsidecar 后,使用 WSL ubuntu ssl 报错
  • redisson锁的可重入、可重试、超时续约原理详解
  • npm包 本地测试流程
  • 软件测试之单元测试详解
  • 2025年5月一区SCI-状态优化算法Status-based Optimization-附Matlab免费代码
  • 闸门远程控制系统的主要功能有哪些?
  • LeetCode-多语言实现冒泡排序以及算法优化改进
  • 数据可视化新姿势:Altair的声明式魔法
  • Ubuntu+k3s+karmada离线安装部署说明
  • shell正则表达式
  • GFS分布式文件系统
  • 汽车电子行业的高效研发利器——全星研发项目管理APQP软件系统
  • 中国汽车启动电池市场深度剖析:现状、趋势与展望
  • Linux 查看两个主机之间时间是否同步 - clockdiff命令详解
  • 前端面试六之axios
  • 408考研逐题详解:2009年第38题
  • 【Kubernetes】架构与原理:核心概念、组件协同及容器化部署解析
  • 【考研数学:高数6】一元函数微分学的应用(二)——中值定理、微分等式和微分不等式
  • 鼠标右键添加新建某种文件的方法
  • Go并发模型与模式:context 上下文控制