Leetcode—55.跳跃游戏【中等】

2023每日刷题(四十)

Leetcode—55.跳跃游戏

在这里插入图片描述

贪心法实现代码

#define MAX(a, b) ((a > b)? (a): (b))bool canJump(int* nums, int numsSize) {int k = 0;for(int i = 0; i < numsSize; i++) {if(i > k) {return false;}k = MAX(k, i + nums[i]);}return true;
}

运行结果

在这里插入图片描述
复杂度分析
● 时间复杂度:O(n),其中n为数组长度。
● 空间复杂度:O(1)。

动态规划思想

模拟整个过程,可以发现数组中的每个位置能否到达都依赖于前面的位置。只要前面某个位置可达,并且它的最大跳跃长度能够达到目标位置,那么目标位置也是可达的。

每个位置都有可达和不可达两种状态,并且跳跃的过程可以模拟为状态转移的过程,因此这个问题可以尝试使用动态规划去解决。

设计布尔值dp[i]表示状态,True为可达,False为不可达,从左到右依次遍历每个位置,每次通过前面的位置来求解当前位置是否可达。状态转移方程为dp[i]=dp[i]or dp[j](0 <=j < i 且j+nums[j]>=i),其中i为当前求解位置的下标,j为前面位置的下标,nums[j]为前面位置可以跳跃的最大长度。

bool canJump(int* nums, int numsSize) {bool dp[numsSize];memset(dp, false, numsSize);dp[0] = true;for(int i = 1; i < numsSize; i++) {for(int j = 0; j < i; j++) {if(j + nums[j] >= i) {dp[i] = dp[i] || dp[j];}}}return dp[numsSize - 1];
}

复杂度分析
● 时间复杂度: O ( n 2 ) O(n^2) O(n2),其中n为数组长度。
● 空间复杂度:O(n),其中n为数组长度。
在这里插入图片描述
重新观察一下整个循环的过程,每次为了判断第i个位置是否可达(外循环),我们都需要考虑从0到i-1上的位置信息(内循环),显然前面位置上的信息都会不断重复地被考虑。

优化的方法就是改变dp[i]状态的含义,让dp[i]能够表示所有前面的位置信息,而不仅仅表示自身位置是否可达。上面的内循环实际上在考虑前面位置所能到达的最远位置是否大于当前位置,因此可以让dp[i]表示起点为0到i的位置所能到达的最远位置。考虑前i-1个位置能否到达i,具体如下。

● 如果不能到达i,则不能从i起跳,前i个位置所能到达的最远位置就是dp[i-1]。
● 如果能到达i,则可以从i起跳,前i个位置所能到达的最远位置就是起点为i能够起跳的最远位置和前i-1个位置所能到达的最远位置这两者的较大值。
在这里插入图片描述

#define MAX(a, b) (a > b ? (a): (b))
bool canJump(int* nums, int numsSize) {int dp[numsSize];memset(dp, 0, numsSize);dp[0] = nums[0];for(int i = 1; i < numsSize; i++) {if(dp[i - 1] < i) {dp[i] = dp[i - 1];} else {dp[i] = MAX(dp[i - 1], i + nums[i]);}}if(dp[numsSize - 1] < numsSize - 1) {return false;}return true;
}

实现代码

#define MAX(a, b) (a > b ? (a): (b))
bool canJump(int* nums, int numsSize) {int pre = nums[0];int cur = pre;for(int i = 1; i < numsSize; i++) {if(pre < i) {cur = pre;} else {cur = MAX(pre, i + nums[i]);}pre = cur;}if(pre < numsSize - 1) {return false;}return true;
}

运行结果

在这里插入图片描述

复杂度分析
● 时间复杂度:O(n),其中n为数组长度。
● 空间复杂度:O(n),其中n为数组长度。

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

借助 XEOS V6, 农牧龙头企业实现原有存储的高效在线替换

面对旧有存储系统的应用不足&#xff0c;某大型现代农牧龙头企业采用了星辰天合的对象存储 XEOS V6 方案&#xff0c; 该方案以其卓越的技术架构和同城双活异地灾备的解决方案完整性&#xff0c;在无缝高效完成系统替换的同时&#xff0c;可以极大地提升系统的灵活性和业务的连…

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…

AT89S52单片机智能寻迹小车自动红外避障趋光检测发声发光设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;寻迹 获取完整说明报告源程序数据 小车具有以下几个功能&#xff1a;自动避障功能&#xff1b;寻迹功能&#xff08;按路面的黑色轨道行驶&#xff09;&#xff1b;趋光功能&#xff08;寻找前方的点光源并行驶到位&…

枚举与应用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 枚举简介 枚举是一种特…

ZKP11.4 Use CI to instantiate Fiat-Shamir

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.4 Use CI to instantiate Fiat-Shamir Avoid Bad Challenges Def: Given false claim x x x and a first message α \alpha α, a challenge β \beta …

YOLO目标检测——二维码检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;二维码识别、追踪与管理系统数据集说明&#xff1a;二维码检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo…

Python 安装Vue依赖包发生异常:npm ERR! notsup Required: {“node“:“^18.17.0 || >=20.5.0“}

异常&#xff1a; 原因&#xff1a;node和npm要求升级为高版本 解决&#xff1a;重新安装node环境 &#xff08;1&#xff09; 官网下载Node.js &#xff08;2&#xff09;双击安装node.js &#xff08;3&#xff09;运行查看

使用信息面板沟通研发工作

凌鲨里面的内容面板里面有专门针对研发团队的白板功能&#xff0c;它可以把文档&#xff0c;图片&#xff0c;软件设计&#xff0c;需求&#xff0c;任务/缺陷等相关研发要素串接起来。 使用 你还可以调整背景颜色。 引用项目内数据 点击面板中的连接会在右侧打开对应内容

Android : Intent(意图)_页面跳转、传递数据_简单应用

示例图&#xff1a; MainActivity.java package com.example.myintent;import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContract; import andro…

knime 中没有column expressions,怎么下载

knime 中没有column expressions&#xff0c;怎么下载 1、打开view&#xff0c;然后找到knime hub&#xff0c;column expression 2、往里面拖动&#xff0c;就可以安装了 3、然后会出现重启&#xff0c;搜索就可以出现啦

Vue新手必学:Vue的使用和Vue脚手架详解

文章目录 引言第一部分&#xff1a;Vue的基本使用1.1 安装Vue1.2 创建Vue项目1.3 编写第一个Vue组件1.4 在主页面中使用组件1.5 运行Vue项目 第二部分&#xff1a;Vue脚手架的使用2.1 Vue脚手架是什么2.2 创建Vue项目2.3 项目结构2.4 运行项目2.5 插件和配置 第三部分&#xff…

Spring cloud - Feign

Feign的作用 Feign是Netflix公司开发的声明式web客户端组件&#xff0c;Spring对Feign做了无缝集成&#xff1a; Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has plugg…