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

【Leetcode 每日一题 - 扩展】45. 跳跃游戏 II

问题背景

给定一个长度为 n n n 0 0 0 索引 整数数组 n u m s nums nums。初始位置为 n u m s [ 0 ] nums[0] nums[0]
每个元素 n u m s [ i ] nums[i] nums[i] 表示从索引 i i i 向前跳转的最大长度。换句话说,如果你在 n u m s [ i ] nums[i] nums[i] 处,你可以跳转到任意 n u m s [ i + j ] nums[i + j] nums[i+j] 处:

  • 0 ≤ j ≤ n u m s [ i ] 0 \le j \le nums[i] 0jnums[i]
  • i + j < n i + j \lt n i+j<n

返回到达 n u m s [ n − 1 ] nums[n - 1] nums[n1] 的最小跳跃次数。生成的测试用例可以到达 n u m s [ n − 1 ] nums[n - 1] nums[n1]

数据约束

  • 1 ≤ n u m s . l e n g t h ≤ 1 0 4 1 \le nums.length \le 10 ^ 4 1nums.length104
  • 0 ≤ n u m s [ i ] ≤ 1000 0 \le nums[i] \le 1000 0nums[i]1000
  • 题目保证可以到达 n u m s [ n − 1 ] nums[n-1] nums[n1]

解题过程

经典跳跃问题,可以用 造桥场景 来理解。
题目描述不是很好懂,其实是在每个位置 i i i 上,可以在 [ 1 , n u m s [ i ] ] [1, nums[i]] [1,nums[i]] 中选择一个距离 j j j 并从当前位置移动到 i + j i + j i+j 这个位置上。
解决方案是一个比较明显的贪心算法,每次选择能够到达的最远位置来造桥,能尽可能地减少操作次数。
注意要到达的位置是 n − 1 n - 1 n1,所以循环应该在 i < n − 1 i < n - 1 i<n1 处结束。通过样例的输出可能会想到在结果上进行修正,但这样是不对的,因为最后造额外的桥是有条件的。
由于题目保证了一定能够实现目标,不需要再做额外的处理,不保证一定能够全覆盖的情形,参见 灌溉花园的最少水龙头数目。

具体实现

class Solution {
    public int jump(int[] nums) {
        int res = 0;
        int curEnd = 0;
        int nextEnd = 0;
        // 由于到达的位置是 n - 1,那么在 n - 2 的位置上有可能进行最后一次操作
        for(int i = 0; i < nums.length - 1; i++) {
            // 在每个位置上更新能够到达的最远边界
            nextEnd = Math.max(nextEnd, i + nums[i]);
            // 如果当前已经不能继续往前走,那么在这个位置上造桥
            if(i == curEnd) {
                curEnd = nextEnd;
                res++;
            }
        }
        return res;
    }
}

http://www.kler.cn/a/443932.html

相关文章:

  • 超标量处理器设计笔记(11)发射内容:分配、仲裁、唤醒
  • WEB开发: 全栈工程师起步 - Python Flask +SQLite的管理系统实现
  • 作业Day4: 链表函数封装 ; 思维导图
  • opencv所有常见函数
  • 医院药学的创新引擎:ChatGPT的应用与思考
  • GM_T 0039《密码模块安全检测要求》题目
  • 第R3周:RNN-心脏病预测
  • 基于Qt的登陆界面设计
  • MybatisPlus(四)
  • ubuntu下gdb调试ROS
  • 【C++算法】47.分治_归并_排序数组
  • 云原生周刊:Kubernetes v1.32 正式发布
  • apache应用(客户机地址限制、用户授权限制、日志分割、AWStats日志分析)
  • 【Apache Paimon】-- 10 -- Paimon 0.9.0 集成 Hive 3.1.3
  • python学习 洛谷P2141 [NOIP2014 普及组] 珠心算测验
  • Java操作Redis-Jedis
  • 高德地图离线加载解决方案(内网部署)+本地地图瓦片加载
  • []2024年第五届蓝桥杯全国软件和信息技术专业人才大赛(Web 应用开发)
  • c++中如何保持结构体的线程安全?3D坐标的线程安全:从理论到最优解
  • 【myXdb.stop()关闭时保存数据流程分析】xdb关服时数据落地源码