leetcode-45.跳跃游戏II

题很简单,怎么少点写代码比较困难。

这题很明显贪心算法,每次跳跃我们都希望理论上能到达的地方更远。一开始站在初始点,那么可选范围就是0到nums[0],在这里面找能跳得最远的点i,接下来遍历nums[0]+1到 i+nums[i],这是下一个可选范围,仍然找能跳的最远的点j。

可以发现,遍历一次就够。跳多少次怎么判断?我们需要遍历的时候保存当前可选范围和跳跃最远范围,当遍历到可选范围边界了,说明得从刚才的点里能跳的最远的地方跳一次了,此时jump+=1,可选范围更新。

由于遍历总是在可选范围里(每次要超出可选范围了,都会更新可选范围),所以如果在可选范围未到终点时,如果发现某一步能到达终点,就可以停止遍历了,直接jump+1返回

python 复制代码
class Solution:
    def jump(self, nums: List[int]) -> int:
        jump = 0
        cur_right = 0 
        next_right = 0 
        for i in range(len(nums)-1):
            next_right = max(next_right, i+nums[i])
            if next_right >= len(nums)-1:
            	return jump+1
            if i == cur_right:
                cur_right = next_right 
                jump+= 1 
        return jump
相关推荐
tryCbest17 小时前
软考 - 排序算法
算法·排序算法
AKA__Zas17 小时前
芝士算法(双指针篇 1.0)
java·算法·学习方法
吃着火锅x唱着歌17 小时前
LeetCode 726.原子的数量
linux·算法·leetcode
君义_noip17 小时前
CSP-S 2025 提高级 第一轮(初赛) 阅读程序(3)
c++·算法·信息学奥赛·csp-s 初赛
玛卡巴卡ldf17 小时前
【LeetCode 手撕算法】(栈)有效括号、最小栈、字符串解码、每日温度、柱状图最大矩形
java·数据结构·算法·leetcode·力扣
happyprince17 小时前
05-FlagEmbedding 评估模块详解
算法
wuweijianlove17 小时前
算法优化的多目标平衡与性能建模研究的技术7
算法
_深海凉_17 小时前
LeetCode热题100-两两交换链表中的节点
算法·leetcode·链表
啊罗罗17 小时前
windows下,c++的axv2+fma/avx-vnni加速计算demo
c++·windows·算法
qq_2837200517 小时前
Embedding 调优实战技巧:从原理到落地,打造高精度向量检索
python·算法·词嵌入·调优