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

相关推荐
失散139 分钟前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构
刘一说10 分钟前
Linux调试命令速查:Java/微服务必备
java·linux·微服务
IT·陈寒17 分钟前
怎么这么多 StringUtils —— Apache、Spring、Hutool 全面对比
java·spring·apache
2401_8588698018 分钟前
支持向量机
算法·机器学习·支持向量机
用户48221371677535 分钟前
深度学习——卷积神经网络
算法
AAA修煤气灶刘哥36 分钟前
MySQL 查文本查哭了?来唠唠 ES 这货:从 “啥是 ES” 到 Java 撸代码,一篇整明白!
java·后端·elasticsearch
金銀銅鐵37 分钟前
[Java] 浅析密封类(Sealed Classes) 在 class 文件中是如何实现的
java·后端
Hello.Reader37 分钟前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
DashingGuy38 分钟前
算法(keep learning)
java·数据结构·算法
时间行者_知行合一38 分钟前
Spring如何选择依赖注入方式
java