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

力扣 hot100 Day71

45. 跳跃游戏 II

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

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

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

返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1

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

处理逻辑是,在上一题的基础上,记录当前的跳跃次数以及当前所能达到的最远点,只有在达到最远点后,才增加跳跃次数。

这里的次数,其实记录的是到达current_end所需最小次数,所以终止条件是,current_end大于等于n-1。

很容易陷入的牛角尖是,每一步都走最远未必次数最少。这是正确的,但这里的算法逻辑是,在当前跳跃范围内,尽可能探索下一步所能到达的最远范围,只有在不得不跳时,才次数加一。

在 jumps++时,算法并不关心“具体跳到哪里”,而是通过维护 current_end和 farthest隐式决定了跳跃策略​

http://www.dtcms.com/a/327247.html

相关文章:

  • Claude Code,Gemini CLI,Trae-agent, Qwen Code 使用对比及感受
  • 【数据分享】2020-2022年我国乡镇的逐日最高气温数据(Shp/Excel格式)
  • ABAC 权限策略扩展
  • 在达梦数据库中使用group by 命令报错问题
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • Python 正则表达式 re.findall()
  • special topic 11 (1)
  • 【Linux系统】详解Ext2,文件系统
  • 打印流水号条形码
  • 标注工具组件功能文档
  • 如何将新建的Anaconda虚拟环境导入Juputer内核中?
  • Spring Boot项目通过RestTemplate调用三方接口详细教程
  • 系统架构设计师备考之架构设计实践知识
  • 完整反作弊系统架构(技术讲解)
  • 如何解决Unexpected token ‘<’, “<!doctype “… is not valid JSON 报错问题
  • MyBatis持久层实现
  • 人工智能概念:常见的大模型微调方法
  • Web学习笔记5
  • Java设计模式-快速入门
  • LeetCode算法领域经典入门题目之“Two Sum”问题
  • 1.4.1 副驾驶(Copilot)模式:让人工智能大模型成为你的指导和建议者
  • 从零开始之stm32之CAN通信
  • 聚合搜索中的设计模式
  • 鲲鹏arm服务器安装neo4j社区版,实现图书库自然语言检索基础
  • leetcode49.字母异位词分组
  • NLP—词向量转换评论学习项目分析真实案例
  • 本地(macOS)和服务器时间不同步导致的 Bug排查及解决
  • linux 执行ls命令文件夹显示全白色
  • 微前端架构:原理、场景与实践案例
  • Rust 性能提升“最后一公里”:详解 Profiling 瓶颈定位与优化|得物技术