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
相关推荐
lingxiao1688820 分钟前
双目立体视觉
图像处理·算法·机器学习·计算机视觉
JNU freshman24 分钟前
和为target问题汇总
算法
2401_8590490828 分钟前
MSPM0--Timer(一口一口喂版)
arm开发·单片机·mcu·算法
寂空_33 分钟前
【算法笔记】ACM数论基础模板
c++·笔记·算法
ggabb42 分钟前
当九九乘法口诀“出海”英国:文化碰撞下的数学教育变革
算法
爱coding的橙子1 小时前
每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h
算法·leetcode
wuqingshun3141591 小时前
蓝桥杯 10. 全球变暖
c++·算法·职场和发展·蓝桥杯
阳洞洞1 小时前
leetcode 56. 合并区间
leetcode
手握风云-1 小时前
二叉树深搜:在算法森林中寻找路径
算法
xu_wenming1 小时前
华为Watch的ECG功能技术分析
人工智能·嵌入式硬件·算法