码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 跳跃游戏 I - VII


    跳跃游戏

    • [55. 跳跃游戏](https://leetcode.cn/problems/jump-game/)
    • [45. 跳跃游戏 II](https://leetcode.cn/problems/jump-game-ii/)
    • [1306. 跳跃游戏 III](https://leetcode.cn/problems/jump-game-iii/)
    • [1345. 跳跃游戏 IV](https://leetcode.cn/problems/jump-game-iv/)
    • [1340. 跳跃游戏 V](https://leetcode.cn/problems/jump-game-v/)
    • 1696. 跳跃游戏 VI
    • 1871. 跳跃游戏 VII
    • LCP 09. 最小跳跃次数
    • 1654. 到家的最少跳跃次数
    • 剑指 Offer 10- II. 青蛙跳台阶问题
    • 975. 奇偶跳
    • 403. 青蛙过河
    • 1377. T 秒后青蛙的位置
    • 935. 骑士拨号器
    • 1728. 猫和老鼠 II

    55. 跳跃游戏

    class Solution:
        def canJump(self, nums: List[int]) -> bool:
            # 0 就是坑,看能不能跳过去
            # if all(nums): return True
            n, right = len(nums), 0 # 最大覆盖范围
            for i, x in enumerate(nums):
                # 说明掉进坑了
                if i > right: return False 
                right = max(right, i + x)                 
                if right >= n - 1: return True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    45. 跳跃游戏 II

    class Solution:
        def jump(self, nums: List[int]) -> int:
            n = len(nums)
            # [2,3,1,1,4]
            # 起跳点从索引 0 开始,最远可跳到 2,更新 maxPos = 2, 此时 end = 2;
            # 起跳点可以是索引 1 or 2, 最远可跳到 4, 完成跳跃。
            maxPos, end, step = 0, 0, 0
            for i, x in enumerate(nums[:-1]):
                if i + x > maxPos:
                    maxPos = i + x
                if i == end: # 完成一次跳跃
                    end = maxPos
                    step += 1
            return step
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1306. 跳跃游戏 III

    class Solution:
        def canReach(self, arr: List[int], start: int) -> bool:
        
            def f(i):
                x = arr[i]
                if not x: return True
                vis.add(i)
                for j in [i + x, i - x]:
                    if 0 <= j < n and j not in vis:
                        if f(j): return True
                return False
                
            vis = set()
            n = len(arr)
           
            return f(start)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    1345. 跳跃游戏 IV

    数组可以抽象为一个无向图,数组元素为图的顶点,相邻或值相同的元素之间有一条无向边相连。每条边的权重都为 1,即此图为无权图。求从第一个元素到最后一个元素的最少操作数,即求从第一个元素到最后一个元素的最短路径长度。

    class Solution:
        def minJumps(self, arr: List[int]) -> int:
            d, q, vis, n = defaultdict(list), deque([[0, 0]]), set([0]), len(arr)
            for i, val in enumerate(arr): d[val].append(i)
            while q:
                idx, step = q.popleft()
                if idx == n - 1: return step
                v = arr[idx]
                step += 1
                if idx > 0 : d[v].append(idx - 1)
                if idx < n - 1: d[v].append(idx + 1)
                for i in d[v]: # 与 idx 相邻或相同元素之间一步可达。
                    if i not in vis:
                        q.append([i, step])
                        vis.add(i)
                del d[v] 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    class Solution:
        def minJumps(self, arr: List[int]) -> int:
            n = len(arr)
            d = defaultdict(set)
            for i, x in enumerate(arr):
                d[x].add(i)
            vis = set()
            step = 0
            q = {0, }
            while q: # 谁先到谁最短     
                if n-1 in q: return step
                tmp = set()
                for i in q:                       
                    vis.add(i)
                    if i: tmp.add(i-1)
                    tmp.add(i+1)
                    tmp.update(d[arr[i]])
                    d.pop(arr[i])
                step += 1
                q = tmp - vis            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1340. 跳跃游戏 V

    class Solution:
        def maxJumps(self, arr: List[int], d: int) -> int:
    
            def dfs(i):
                if q[i] != -1: return
                q[i] = 1
                j = i - 1
                while j >= 0 and i - j <= d and arr[i] > arr[j]:
                    dfs(j)
                    q[i] = max(q[i], q[j] + 1)
                    j -= 1
                    
                j = i + 1
                while j < n and j - i <= d and arr[i] > arr[j]:
                    dfs(j)
                    q[i] = max(q[i], q[j] + 1)
                    j += 1
                    
            n = len(arr)
            q = [-1] * n
            for i in range(n):
                dfs(i)
           
            return max(q)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    1696. 跳跃游戏 VI

    1871. 跳跃游戏 VII

    LCP 09. 最小跳跃次数

    1654. 到家的最少跳跃次数

    剑指 Offer 10- II. 青蛙跳台阶问题

    975. 奇偶跳

    403. 青蛙过河

    1377. T 秒后青蛙的位置

    935. 骑士拨号器

    1728. 猫和老鼠 II

  • 相关阅读:
    【无标题】
    目标检测文献
    QDebug 日志输出的浏览器
    Metasploit介绍
    3.6 万颗星!开源 Web 服务器后起之秀,自带免费 HTTPS 开箱即用
    springboot整合ELK
    工作流---流程变量
    Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
    Go语言中的面向对象编程(OOP)
    『C语言进阶』const详解
  • 原文地址:https://blog.csdn.net/weixin_43955170/article/details/126915416
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号