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
相关推荐
invincible_Tang1 小时前
R格式 (15届B) 高精度
开发语言·算法·r语言
独好紫罗兰2 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
序属秋秋秋2 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
玉树临风ives2 小时前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
KeithTsui3 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
mNinGInG3 小时前
c++练习
开发语言·c++·算法
纪元A梦4 小时前
分布式锁算法——基于ZooKeeper的分布式锁全面解析
java·分布式·算法·zookeeper
Panesle4 小时前
广告推荐算法:COSMO算法与A9算法的对比
人工智能·算法·机器学习·推荐算法·广告推荐
月亮被咬碎成星星4 小时前
LeetCode[15]三数之和
数据结构·算法·leetcode
飞川撸码5 小时前
【LeetCode 热题100】240:搜索二维矩阵 II(详细解析)(Go语言版)
leetcode·矩阵·golang