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

算法之 跳跃游戏

文章目录

  • 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

相关文章:

  • Java进阶,时间与日期,包装类,正则表达式
  • 学习《人工智能的未来》这本书中的恒定表征概念:恒定表征和变化的恒定表征
  • Ubuntu20.04桥接网络和静态IP配置
  • 通过 Docker 安装和部署 KeyDB v6.3.4 的详细步骤
  • elementui: el-dialog的header设置样式不生效
  • Python PyCharm DeepSeek接入
  • 机器学习:朴素贝叶斯
  • 大数据、云计算、人工智能等技术深度融合的智慧快消开源了。
  • C++17 中的 std::reduce:详细教程
  • foobar2000设置DSP使用教程及软件推荐
  • 成本哪个更低更好用?分析对比大模型OCR、传统OCR和深度学习OCR
  • 28 在可以控制 postgres 服务器, 不知道任何用户名的情况下怎 进入 postgres 服务器
  • 基于springboot轨道交通安全评估系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Windows环境管理多个node版本
  • 2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习
  • Webpack代码分割、分割策略性能优化详解
  • 记一次Self XSS+CSRF组合利用
  • 第二章:Matlab 编程基础
  • 【C++】class类(类的定义、成员访问、类的大小、this指针)
  • AI 数字人,超越虚拟的实体
  • 独立网站开发/电商网
  • wordpress自由定制导航/seo优化是利用规则提高排名
  • notefolio设计官网/seo优化方法网站快速排名推广渠道
  • 百度西安研发中心/站长工具seo综合查询网
  • 网站用户维度/做个网站需要多少钱
  • 网站注册系统用什么做/交换友情链接的意义是什么