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
相关推荐
Darkwanderor15 分钟前
数论——同余问题全家桶3 __int128和同余方程组
c++·算法·数论·中国剩余定理
Xyz_Overlord15 分钟前
机器学习——聚类算法
算法·机器学习·聚类
dessler17 分钟前
代理服务器-LVS的3种模式与调度算法
运维·服务器·网络·算法·nginx·tomcat·lvs
拼好饭和她皆失21 分钟前
动态规划 熟悉30题 ---上
算法·动态规划
fen_fen1 小时前
学习笔记(26):线性代数-张量的降维求和,简单示例
笔记·学习·算法
王禄DUT1 小时前
炉石传说 第八次CCF-CSP计算机软件能力认证
c++·算法
白熊1881 小时前
【推荐算法】DeepFM:特征交叉建模的革命性架构
算法·架构·推荐算法
L_cl1 小时前
【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
python·算法·排序算法
小刘不想改BUG2 小时前
LeetCode 70 爬楼梯(Java)
java·算法·leetcode
老歌老听老掉牙2 小时前
使用 SymPy 进行向量和矩阵的高级操作
python·线性代数·算法·矩阵·sympy