力扣hot100:跳跃游戏||

题目描述:

思路分析:

本题依旧是贪心思想,通过局部最优找全局最优。

本题局部最优就是在当前可到达范围内选择能跳的更远的那个点,通过不断选择范围内能跳的最远的点来获得全局的最少跳跃次数。

整体过程从数组起点开始向前遍历,用一次遍历来模拟跳跃过程。遍历过程中,始终维护两个关键信息:当前这一步能够到达的最远位置(end) ,以及在当前范围内,下一步能够到达的最远位置(maxpos)

在遍历到每一个位置时,都会尝试利用该位置的跳跃能力,去更新"下一步最远能到达的位置"。这样可以保证,在不增加跳跃次数的前提下,尽可能扩大下一次跳跃的覆盖范围。

当遍历位置到达当前这一步的最远边界时,说明这一跳所能利用的所有位置已经全部考虑完毕,此时必须进行一次新的跳跃。跳跃次数加一,同时将当前可达范围更新为之前计算好的下一步最远位置,继续向前推进。

通过这种方式,每一次跳跃都不是立即决定跳到哪个具体位置,而是先在当前范围内进行"最优扩展",等到必须跳的时候,再统一更新范围并计数。不断重复这一过程,最终覆盖到数组的最后一个位置,从而得到最少的跳跃次数。

代码:

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int len=nums.length;
        int end=0;
        int maxpos=0;
        int step=0;
        for(int i=0;i<len-1;i++){
            maxpos=Math.max(maxpos,i+nums[i]);
            if(i==end){
                end=maxpos;
                step++;
            }
        }
        return step;
    }
}

为什么循环条件是 i < len - 1?

因为代码在遍历过程中一旦到达当前可达边界就会统计一次跳跃,而当已经到达数组最后一个位置时,实际上不需要再进行任何跳跃,如果循环遍历到 len - 1,就有可能在终点位置多计算一次跳跃次数。因此只遍历到 len - 2,也就是使用 i < len - 1,可以保证只在"还需要继续向前推进"的情况下才统计跳跃次数,避免结果偏大。

相关推荐
明志数科12 小时前
具身智能真机采集工程实践:5类高频失效模式与规避清单
人工智能·算法·机器学习
CSDN_RTKLIB12 小时前
空间哈希与拓扑缓存
算法
科技泡泡堂12 小时前
想玩《黎明行者之血》?2026年这4款适合玩3A的游戏本值得一看
游戏
大熊背13 小时前
IspPipeline色相旋转模块实现
人工智能·算法·计算机视觉
爱学习的小白柏14 小时前
同城双活的核心不是双活,是逼着数据别出机房
大数据·人工智能·算法·langchain·ai编程
鹿角片ljp14 小时前
LeetCode 31:下一个排列|右找小,右找大,交换,右反转
java·数据结构·算法
梦想平凡14 小时前
百游棋牌源代码开发搭建教程(二):PostgreSQL安装、业务表创建与版本化迁移
数据库·游戏·postgresql
橘子汽水16815 小时前
Leetcode 198,118打家劫舍,杨辉三角
算法·leetcode
LuminousCPP15 小时前
数据结构-排序(三):快速排序进阶|挖坑法、双指针交换与手动栈非递归实现
c语言·数据结构·笔记·算法·排序算法
数据知道16 小时前
国密算法实战——SM2/SM3/SM4 在国产系统中的应用
网络·算法·安全·网络安全·密码学·哈希算法