算法练习13——跳跃游戏II

news2024/11/25 11:42:56

LeetCode 45 跳跃游戏 II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

动态规划

dp[j]为跳到i位置所需的最少次数
实测能过但是耗时很高,恰好数据集各项数量级每超出限制,但凡0 <= nums[i] <= 1000加一点估计都过不了

提示:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
题目保证可以到达 nums[n-1]

class Solution:
    def jump(self, nums: List[int]) -> int:
        length = len(nums)
        if length == 1:
            return 0
        dp = [sys.maxsize] * length
        dp[0] = 0
        for i in range(length):
            for j in range(i + 1, min(i + nums[i] + 1, length)):
                dp[j] = min(dp[j], dp[i] + 1)
        return dp[length - 1]

转换问题 + 蛮力法

image.png

class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        maxPos, end, step = 0, 0, 0
        for i in range(n - 1):
            if maxPos >= i:
                maxPos = max(maxPos, i + nums[i])
                if i == end:
                    end = maxPos
                    step += 1
        return step

# 作者:力扣官方题解
# 链接:https://leetcode.cn/problems/jump-game-ii/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是官方贪心解法,感觉并不足够“贪心”,更像是暴力解法,结合上图说一下我的理解:

  1. 首先一定能到,那么最多就n-1次跳跃,所以遍历每一次跳跃情况
  2. 第一次跳跃,发现可以跳到1、2,没到n-1,那么必然会【跳到1或2】,跳跃次数+1
  3. 第二次跳跃,会从1或2跳,可选位置,从1出发有2、3、4,从2出发有3,综合来看就是2、3、4,但是显然第一次就可以跳到2,第二次的2就可以忽略,实际上本次可忽略的位置就是本次可以跳到但是上次本就可以跳到的地方,而可忽略的位置由上次可以跳到的最远距离决定,第二次跳跃可忽略2本身及之前的位置,所以第二次跳跃【结果为3或4】,跳跃次数+1
  4. 第三次跳跃,会从3或4跳,同理,从3可以跳到4、5,从4可以跳到5、6,综合可以到达4、5、6,忽略4,跳跃结果为【5或6】,显然此时就求出来了

代码写法上,应该有两层循环,第一层循环枚举的最多n-1次的跳跃次数,第二层循环,每一次跳跃中的可选位置,巧的是,把所有可选位置连起来正好是一次数组遍历,所以一层循环就可以搞定

如果将end理解为本次跳跃中可忽略数值的上限,maxPos理解为下次跳跃中可忽略数值的上限(需要由本次跳跃备选项进行遍历计算得出),一切则和官方算法一致,或许if maxPos >= i还可省略

class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        maxPos, end, step = 0, 0, 0
        for i in range(n - 1):
            maxPos = max(maxPos, i + nums[i])
            if i == end:
                end = maxPos
                step += 1
        return step

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2015编译Qt工程发生MSB4018错误完整解决过程

一、错误产生环境 操作系统&#xff1a;Windows10 开发工具&#xff1a;VS2015企业版 Qt版本&#xff1a;Qt5.7.1 64位 二、错误内容 MSB4018 “VCMessage”任务意外失败。 System.FormatException: 索引(从零开始)必须大于或等于零&#xff0c;且小于参数列表的大小。 …

Compose 组件 - 分页器 HorizontalPager、VerticalPager

一、概念 类似于 ViewPager&#xff0c;1.4 版本之前需要借助 accompanis 库&#xff0c;底层基于 LazyColumn、LazyRow 实现&#xff0c;在使用上也基本相同。默认情况下 HorizontalPager 占据屏幕的整个宽度&#xff0c;VerticalPager 会占据整个高度。 fun HorizontalPager(…

@ConditionalOnProperty 用法

文章目录 前言一、使用场景二、使用步骤1.错误示例2.ConditionalOnProperty的解决方案 总结 前言 ConditionalOnProperty 是Spring Boot中的条件注解&#xff0c;它的核心功能是通过属性名以及属性值来实现的&#xff0c;常被用于判断某个属性是否存在&#xff0c;然后决定某个…

049:mapboxGL本地上传WKT文件,在地图上显示图形

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中本地上传wkt文件,先将wkt转换为geojson格式,然后通过mapbox加载geojson数据的方法解析,在地图上显示图形。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示…

SQLite4Unity3d安卓 在手机上创建sqlite失败解决

总结 要在Unity上运行一次出现库&#xff0c;再打包进APK内 问题 使用示例代码的创建库 var dbPath string.Format("Assets/StreamingAssets/{0}", DatabaseName); #else// check if file exists in Application.persistentDataPathvar filepath string.Format…

组件协作模式

二、组件协作模式 组件协作模式概念1、模板方法模式&#xff08;Template_Method&#xff09;模式定义动机(Motivation)具体代码举例实现要点总结 2、策略模式&#xff08;Strategy&#xff09;3、观察者模式&#xff08;Observer/Event&#xff09; 组件协作模式概念 现代软件…

【微服务】微服务初步认识 - 微服务技术如何学习 · 认识微服务架构

微服务&#xff08;1&#xff09; 文章目录 【微服务】&#xff08;1&#xff09;1. 微服务相关技术栈2. 微服务学习路线3. 认识微服务架构3.1 单体架构3.2 分布式架构3.3 微服务(架构)3.4 微服务(架构)治理落实相关的SpringCloud、SpringCloudAlibaba和阿里巴巴的Dubbo提供的服…

【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口

文章目录 【MySQL SpringBoot 小点子】全面实现流程 数据库导出Excel表格文件的接口1. 什么是VO&#xff08;View Object&#xff09;对象2. BeanCopyUtils进行两个对象的数据转移3. mapper层实现4. service层实现5. vo对象创建6. 保存路径配置7. controller层核心代码实现8.…

048:mapboxGL本地上传geojson文件,在map上解析显示图形

第048个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中本地上传geojson文件,通过mapbox加载geojson数据的方法解析,在地图上显示图形。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共112行)相关API…

39 本书助力精益成长

目录 ​编辑 Idea - 思考者的世界处处都是台风口 人才 - 所有的问题,归根结底都是人的问题 产品 - 不仅要满足需求,还要满足想象力

云上攻防-云原生篇KubernetesK8s安全APIKubelet未授权访问容器执行

文章目录 K8S集群架构解释&#xff08;见上图参考&#xff09;K8S集群攻击点(见上图参考)-重点API Server未授权访问&kubelet未授权访问复现 K8S集群架构解释&#xff08;见上图参考&#xff09; Kubernetes是一个开源的&#xff0c;用于编排云平台中多个主机上的容器化的…

[动手学深度学习]生成对抗网络GAN学习笔记

论文原文&#xff1a;Generative Adversarial Nets (neurips.cc) 李沐GAN论文逐段精读&#xff1a;GAN论文逐段精读【论文精读】_哔哩哔哩_bilibili 论文代码&#xff1a;http://www.github.com/goodfeli/adversarial Ian, J. et al. (2014) Generative adversarial network…

【Kotlin精简】第3章 类与接口

1 简介 Kotlin类的声明和Java没有什么区别&#xff0c;Kotlin中&#xff0c;类的声明也使用class关键字&#xff0c;如果只是声明一个空类&#xff0c;Kotlin和Java没有任何区别&#xff0c;不过定义类的其他成员会有一些区别。实例化类不用写new&#xff0c;类被继承或者重写…

如何开始使用 Kubernetes RBAC

基于角色的访问控制 (RBAC) 是一种用于定义用户帐户可以在 Kubernetes 集群中执行的操作的机制。启用 RBAC 可以降低与凭证盗窃和帐户接管相关的风险。向每个用户授予他们所需的最低权限集可以防止帐户拥有过多的特权。 大多数流行的 Kubernetes 发行版都从单个用户帐户开始,…

值得拥有的 12 大最佳照片恢复软件 [持续更新]

由于误删、损坏、病毒攻击等原因&#xff0c;您可能会丢失珍贵的照片。幸运的是&#xff0c;市场上有专业的照片恢复工具。但是&#xff0c;根据您的需要找到合适的照片恢复软件的任务可能压力很大。为了帮助您做出正确的决定&#xff0c;我们精心挑选了您可以信赖的收费最高的…

opencv 图像识别 指纹识别 - python 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

STM32Cube高效开发教程<基础篇>(四)----GPIO输入/输出

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、 GPIO功能…

Vue3 + Nodejs 实战 ,文件上传项目--实现文件批量上传(显示实时上传进度)

目录 技术栈 1.后端接口实现 2.前端实现 2.1 实现静态结构 2.2 整合上传文件的数据 2.3 实现一键上传文件 2.4 取消上传 博客主页&#xff1a;専心_前端,javascript,mysql-CSDN博客 系列专栏&#xff1a;vue3nodejs 实战--文件上传 前端代码仓库&#xff1a;jiangjunjie…

城市消防无人机控制系统的设计

目录 摘 要......................................................................................................................... 2 第一章 绪论.............................................................................................................…

Qt 5.12.12 静态编译(MinGW)

前置准备 系统环境 版本 Windows 11 专业版 版本 22H2 安装日期 ‎2023/‎6/‎18 操作系统版本 22621.2428 体验 Windows Feature Experience Pack 1000.22674.1000.0依赖工具 gcc Qt 5.12.12 安装 MinGW 后自动安装 https://download.qt.io/archive/qt/5.12/5.12.12/qt-ope…