当前位置: 首页 > article >正文

算法之 跳跃游戏

文章目录

  • 55.跳跃游戏
    • 思路参考:56.合并区间

55.跳跃游戏

55.跳跃游戏
在这里插入图片描述

灵神思路

思路分析: 两种思路,思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr,如果i>mr就说明无法到达i,否则就是可以到达;思路2是可以将每一个nums[i] 转换为 [i,i+nums[i]]的这样的一个区间,这样我们只需通过合并每一个区间,如果合并之后的区间包含完整的区间,那么就说明可以可以到达的

思路1:

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        # 维护最右可以到达的位置
        mr = 0
        for i,c in enumerate(nums):
            # 如果当前所需到达的坐标大于先前可以到达的最右边的距离,那么就直接返回false
            if i > mr :
                return False
            mr = max(mr,i+c)
        return True

思路2:区间合并

思路参考:56.合并区间

56.合并区间
在这里插入图片描述

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        # 直接合并就好了,start,end 记录当前区间的开始与结尾
        # 然后遍历后面一个区间,判断 start1是否大于end,如果大于就将当前区间加入,并更新新的start和end
        # 否则就合并
        # 先进行排序,先按照开始时间进行升序
        intervals.sort(key = lambda x :x[0] )
        n = len(intervals)
        ans = []
        start = intervals[0][0]
        end = intervals[0][1]
        for i in range(1,n):
            if intervals[i][0] <= end:
                # 当后面一个活动的开始时间在前面的一个结束时间之前,合并的时候结束时间取它们的较大值
                end = max(end,intervals[i][1])
            else:
                ans.append([start,end])
                start,end = intervals[i][0],intervals[i][1]
        # 最后一个还需要加入
        ans.append([start,end])
        return ans

参照这个区间合并的思路,写出对应的题解

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        # 使用区间合并的算法进行求解
        # nums[i] 转换为 [i,i+nums[i]]
        n = len(nums)
        start,end = 0,0+nums[0]
        for i in range(1,n):
            # 当当前的坐标,也就是区间的开始小于前面的区间的结尾,说明可以合并,然后就更新end
            if i <= end:
                end = max(i+nums[i],end)
        if end>=n-1:
            return True
        else:
            return False


http://www.kler.cn/a/545951.html

相关文章:

  • 深拷贝实现方法
  • 缓存三大问题及其解决方案
  • 第1章大型互联网公司的基础架构——1.5 服务发现
  • STM32HAL库快速入门教程——常用外设学习(2)
  • nginx播放视频(auth_request鉴权)
  • Unity3D 类MOBA角色控制器 开箱即用
  • 调用DeepSeek API接口:实现智能数据挖掘与分析
  • 腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型
  • 机器视觉--Halcon变量的创建与赋值
  • 【ICP/EDI教程】增值电信年报网络信息安全表存档记录 申请的时候对着抄
  • 两步在 Vite 中配置 Tailwindcss
  • 【git-hub项目:YOLOs-CPP】本地实现02:跑通项目了
  • Humanoid Robot Price Break 人形机器人价格突破
  • nats 消息系统架构
  • 【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】
  • 【自学笔记】人工智能基础知识点总览-持续更新
  • xpath语法以及基本使用
  • npm安装时无法访问github域名的解决方法
  • 视觉定位VPS的现状与未来
  • 华纳云:如何从服务器日志中发现僵尸进程?