力扣 跳跃游戏 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会很慢。而贪心策略在于,每一步都存下最优状态便于后续的更新。

相关推荐
碎梦归途15 分钟前
23种设计模式-行为型模式之中介者模式(Java版本)
java·jvm·设计模式·中介者模式·软件设计师
mvufi31 分钟前
day31 第八章 贪心算法 part05
算法·贪心算法
Java手札36 分钟前
在idea开发中遇到的20个bug
java·bug·intellij-idea
南客先生39 分钟前
Arthas在Java程序监控和分析中的应用
java·面试·arthas
小红的布丁1 小时前
JVM 内存分配策略
java·jvm
珊瑚里的鱼1 小时前
第一讲 | 算法复杂度
c语言·开发语言·数据结构·笔记·算法·visualstudio·visual studio
啊阿狸不会拉杆1 小时前
人工智能数学基础(四):线性代数
人工智能·python·数学·算法·机器学习
赶路人儿2 小时前
mybatis传递多个不同类型的参数到mapper xml文件
java·mybatis
玖剹2 小时前
矩阵区域和 --- 前缀和
数据结构·c++·算法·leetcode·矩阵·动态规划·1024程序员节
我命由我123452 小时前
MQTT - Android MQTT 编码实战(MQTT 客户端创建、MQTT 客户端事件、MQTT 客户端连接配置、MQTT 客户端主题)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime