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.mzph.cn/news/170580.shtml

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

相关文章

Linux(7):Vim 程序编辑器

vi 基本上 vi 共分为三种模式&#xff0c;分别是【一般指令模式】、【编辑模式】与【指令列命令模式】。 这三种模式的作用分别是&#xff1a; 一般指令模式(command mode) 以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式&#xff0c;也简称为一般模式)。在这个模…

微软 Edge 浏览器目前无法支持 avif 格式

avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式&#xff0c;那么只能通过浏览器打开&#xff0c;然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持&#xff0c;目前不支持的可能就只有 Edge 浏览器。…

管理后台系统,springboot+redis+nginx+html+bootstrap

一个简易版的管理后台系统&#xff0c;前后端分离&#xff0c;可适用于小团队开发&#xff0c;支持二次开发。 后端主要技术springboot&#xff0c;他可以帮我们快速的搭建项目&#xff0c;并快速实现开发。 redis做缓存&#xff0c;保存登录状态和一些高频率查询的基础数据。…

浅谈建筑节能监管平台在高校能源管理中的实践与应用

安科瑞 华楠 摘要&#xff1a;以节约型校园建设示范工程———宁夏大学节能监管平台项目建设为例&#xff0c;对系统的总体构架、关键技术、管理软件功能进行了详细的介绍。同时针对项目建设、运行和管理过程中出现的一些问题&#xff0c;提出有针对性的解决措施&#xff0c;为…

.NET6 开发一个检查某些状态持续多长时间的类

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 在代码的世界里,时常碰撞…

从0到0.01入门 Webpack| 007.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Spring Cloud 版本升级遇坑记:OpenFeignClient与Gateway的恩怨情仇

Spring Cloud 版本升级遇坑记&#xff1a;OpenFeignClient与Gateway的恩怨情仇 近日&#xff0c;在对项目中的 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行版本升级时&#xff0c;遭遇了一个令人头疼的问题&#xff1a;Spring Cloud Gateway 在运行时一直卡住&a…

探索亚马逊云科技云存储服务的性能

文章作者&#xff1a;Libai 引言 随着企业越来越多地依赖云存储解决方案&#xff0c;确保存储性能的最佳状态变得至关重要。在本文中&#xff0c;我们将探讨在亚马逊云科技云存储服务上进行存储性能基准测试的重要性&#xff0c;以及如何帮助企业做出资源分配和优化的明智决策…

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法 2023/11/25 23:00 缘起&#xff0c;在拼多多买了2片10TB的7200rpm的日立二手硬盘。 型号&#xff1a;日立 mar-2018 10T硬盘 接上电脑&#xff0c;硬盘感觉在转动了【正常上电了。】 但是X99主板&#xff0c;在WIN10下就…

BC76 [NOIP2008]ISBN号码

#include<stdio.h> int main() {char arr[13]; //存放13位的ISBNint i, j;scanf("%s",arr);int s 0;for(i0, j1; i<11; i){if(arr[i] ! -){s (arr[i]-0)*j; //将字符换成int累加&#xff1a;0162……29158j; //执行if的时候加&#xff0c;不执行不加…

Springmvc原理解析

1. DispatcherServlet springmvc的核心控制器&#xff0c;负责截获所有的请求&#xff0c;当截获请求后委托给HandlerMapping进行请求映射的解析工作&#xff0c;目的是找到哪一个Controller的方法可以处理该请求&#xff0c;找到后再交由给HandlerAdaptor去负责调用并返回Mod…

个人测试用例以及测试金句分享

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️测试必背金句 界面易用可双安&…

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验&#xff09; 一、 环境信息1.1 硬件信息1.2 软件信息 二、 流程介绍三、 前提概要3.1 安装部署3.2 JAR包准备3.2.1 数据源3.2.2 目标源 3.3 脚本模版 四、快速体验五、常见问题5.1 Mysql通信异常5.2 MySQL无Key同步异常5…

VCenter6.7 Web访问提示503 Service Unavailable

PS&#xff1a;本文分享VMware Vcenter在web登录的时候报错&#xff1a;503 Service Unavailable&#xff0c;对于6.7.x版本比较适用&#xff0c;其他版本需自行测试。 简单来讲就是需要重启一下vsphre-client服务&#xff0c;如重启该服务仍无法解决&#xff0c;可以尝试重启一…

LeetCode78.子集

这道题如果用暴力法几乎是不可能解出来的&#xff0c;因为情况太复杂了&#xff0c;但是一旦用上递归回溯就会轻松很多&#xff0c;先上代码&#xff1a; class Solution {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integ…

Linux指令

目录 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令&&rm指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.tail指令 15.时间相关的指令 16.cal指令 17.find指令 18.grep指令 19.zip/unzip指…

4G执法记录仪在大型安保集团,保安集团、蓝天救援队中的 应用,行为规范化,人员定位,考勤打卡,应急指挥调度

【智能化升级】揭秘4G/5G执法记录仪在安保与救援领域如何重塑行业标准与效率 在快速发展的社会当中&#xff0c;大型安保集团、保安集团和蓝天救援队所肩负的任务日益繁重与复杂。无论是在平时的治安巡查、安保执勤&#xff0c;还是在突发公共事件的应急响应中&#xff0c;如何…

前缀和+哈希表——560. 和为 K 的子数组

文章目录 &#x1fa90;1. 题目&#x1f31f;2. 算法原理⭐解法一&#xff1a;暴力枚举⭐解法二&#xff1a;前缀和哈希表 &#x1f31e;3. 代码实现 &#x1fa90;1. 题目 题目链接&#xff1a;560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组…

2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来

2023亚马逊云科技re:Invent引领科技新潮流&#xff1a;云计算与生成式AI共塑未来 历年来&#xff0c;亚马逊云科技re:Invent&#xff0c;不仅是全球云计算从业者的年度狂欢&#xff0c;更是全球云计算领域每年创新发布的关键节点。 2023年亚马逊云科技re:Invent大会在美国拉斯…

Proteus仿真--基于DS1302与1602LCD设计的可调式电子日历与时钟

本文介绍基于51单片机的DS1302与1602LCD可调式电子日历与时钟&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中时间芯片选用DS1302芯片&#xff0c;液晶选用LCD1602模块&#xff0c;按键K1-K4&#xff0c;K1用于年月日时分选择&#xff0c;K2用于…