力扣 跳跃游戏 II

贪心算法,存下每一步的最远,去达到全局的最小跳跃次数。

题目

从题中要达到最少次数,肯定是每一步尽可能走远一点。但注意j被限制了范围,这种不用想每一步遍历时肯定选最大的num[i],但要注意,题中是可以到达不是刚好到达,因此最后一步只要大于最后一个数都是可以的。从第一个数开始遍历,每一步贪心去选最远的距离,然后每个数都存下一个可达到的最远距离便于更新,因为贪心每一次都是基于当前数的最优,并不是全局最优。

时间复杂度: O(n),空间复杂度: O(1)。

java 复制代码
class Solution {
    public int jump(int[] nums) {
        int step=0,end=0,furthest=0;
        for(int i=0; i<nums.length-1;i++){  
            furthest = Math.max(furthest, i+nums[i]);  //dp每个i,记录每个位置能达到的最远距离
            if(i==end){  //i遍历到上个起跳点能到的最远距离
                end = furthest;  //更新到下一步要跳到的位置,注意这里跳的最远距离由i前面的数贪心选出来的
                step++;  //跳往下一步,因此最后一个数不用遍历
            }
        }
        return step;
        
    }
}

动态规划是存一个要维护状态的dp数组,每次的状态由上几个状态更新得到,这题用dp会很慢。而贪心策略在于,每一步都存下最优状态便于后续的更新。

相关推荐
FunnySaltyFish16 分钟前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Ray Liang1 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
颜酱1 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
Java水解1 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing6 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean6 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven977 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55116 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河16 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
地平线开发者17 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶