1.6 面试经典150题 - 跳跃游戏

跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

python 复制代码
class Solution(object):
    
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if not nums or len(nums) == 1: return True
        # 定义左右指针
        left = 0
        right = left + 1
        while right < len(nums):
            tmp_right = left
            # 计算本轮最有可以到达的位置
            for i in range(left, right):
                pos = i + nums[i]
                # 可以到达最后一个元素,提前返回
                if pos >= len(nums) - 1: return True
                if pos > tmp_right: tmp_right = pos
            # 本轮不能再向右了,返回false
            if tmp_right < right: return False
            # 更新两个指针值
            left = right
            right = tmp_right + 1
        return True

本题解题思路:

记录两个值:当前位置left,和目前可以到达的最右位置right

每次对区间内的位置进行遍历,找到新的 可以到达的最右位置

如果不能继续向右,则无法到达最后一个节点

如果可以,则更新left 和 right位置,继续遍历

跳跃游戏II

给定一个长度为 n0 索引 整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

python 复制代码
class Solution(object):
    def jump(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums or len(nums) == 1: return 0
        count = 0
        left = 0
        right = left + 1
        while right < len(nums):
            count += 1
            tmp_right = left
            for i in range(left, right):
                pos = i + nums[i]
                if pos >= len(nums) - 1: return count
                if pos > tmp_right: tmp_right = pos
            if tmp_right < right: return -1
            left = right
            right = tmp_right + 1
        return count

本题对上题略加修改,每次遍历都将计数加1,在上一题返回return的位置,变为返回计数即可。

相关推荐
ocean210321 分钟前
2025-2026年Python大厂面试高频问题
python·面试·面试经验
xn713343 分钟前
实测 Codex CLI 0.154.0:response.failed 为什么会被 idle timeout waiting for SSE 覆盖
python·openai
李高钢44 分钟前
Python Flask 框架入门:从零搭建你的第一个 Web 应用
前端·python·flask
码农学院1 小时前
外贸独立站GEO实战:用 Python 自动生成多语言 llms.txt 和 Schema 站点地图
人工智能·python·chatgpt·geo·geo优化·ai优化aio
jsjzsl21 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法
Thomas.Sir1 小时前
第45课:TensorFlow|异常检测实战【工业设备数据故障识别模型搭建】
人工智能·python·tensorflow
数商云企1 小时前
2026年西安电商智能客服开发选数商云企,技术稳交付快
大数据·python
Patrick在香港1 小时前
Python 分析香港 AQHI 归档 1644 天:同一天的空气,早上 8 点报 3,下午 5 点报 10
开发语言·python·数据分析·api·restful·数据可视化·开放数据
SamChan901 小时前
Python批量处理PDF踩坑实录:中文编码、字体内嵌、多栏排版与内存占用
python·单片机·ai·pdf·机器翻译
3Q工具箱 - BraggTroy1 小时前
Python + PyInstaller 实战:从零打造 10 个 Windows 桌面小工具(附全部踩坑记录与核心代码)
开发语言·windows·python