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为数组长度。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DDR-MIG 学习记录

MIG调试总结&#xff1a; 对vivado软件中用于控制DDR2 / DDR3 的 控制器MIG(Memory Interface Generator)IP核进行了仿真测试&#xff0c;以学习如何用IP核来控制FPGA板载SDRAM的读写。我们只需要学会MIG的接口控制就可以。 ①配置IP核 Xilinx 的 DDR 控制器的名称简写为 MIG&…

vue3+vite+ts项目打包时出错

项目中引入了element-plus国家化的配置&#xff0c;然后进行项目打包&#xff0c;报下面的错误 解决方法&#xff1a; 在main.ts中添加 // ts-ignore

【SQL SERVER】定时任务

oracle是定时JOB&#xff0c;sqlserver是创建作业&#xff0c;通过sqlserver代理实现 先看SQL SERVER代理得服务有没有开 选择计算机右键——>管理——>服务与应用程序——>服务——>SQL server 代理 然后把SQL server 代理&#xff08;MSSQLSERVER&#xff09;启…

Vue和React配置解决跨域,proxy代理两步搞定

Vue配置&#xff1a; 第一步&#xff1a; 找到 vite.config.js 文件 进行如下代码配置 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; export default defineConfig({plugins: [vue()],server: {/*** /api 是代理标识*/p…

基于vue框架的美团类药品点单系统

基于VUE框架的美团类药品点单管理系统 摘要&#xff1a; 2019年12月以来&#xff0c;中国湖北省武汉市爆发新型冠状病毒引发的肺炎疫情&#xff0c;并通过人传人的感染方式快速向全国其他地区扩散。全国上下万众一心抗击病毒&#xff0c;湖北广东浙江等24省市启动重大卫生突发…

从四个典型场景看如何将数据集成“用到实处”

一、数据集成概念 数据集成是指将来自不同数据源的数据整合到一个统一的数据存储中&#xff0c;并确保这些数据能够互相关联、交换和共享的过程。在数据集成的过程中&#xff0c;数据通常需要经过清洗、转换和统一格式化等步骤&#xff0c;以确保数据的一致性、完整性和可用性…

RabbitMQ之延迟消息

文章目录 前言一、死信交换机二、延迟消息死信交换机实现延迟消息图解流程 DelayExchange插件实现延迟消息安装插件声明延迟交换机发送延迟消息 总结 前言 死信交换机、延迟消息 一、死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dea…

基于springboot实现私人健身与教练预约管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现私人健身与教练预约管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应…

编程学习及常见的技术难题

文章目录 编程学习及常见的技术难题引言如何学习编程学习参考开发工具推荐编程中常见的技术难题 编程学习及常见的技术难题 引言 学习编程是一件有趣也有挑战的事情&#xff0c;它可以让你创造出各种有用的软件&#xff0c;解决各种复杂的问题&#xff0c;甚至改变世界。 编程中…

VS2010配置opencv2.4.10

1.下载opencv2.4.10&#xff0c;百度网盘链接如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1UdoQJbRUEB_G2urT703xYQ 提取码&#xff1a;7lbd 2.运行opencv-2.4.10.exe&#xff0c;将文件提取到一个自定义目录里&#xff1a; 3.添加系统环境变量 在“系统变量…

序列化基础

1、简介 对象序列化的目标是将对象保存到磁盘中&#xff0c;或允许在网络中直接传输对象。它允许把内存中的 Java 对象转换成平台无关的二进制流&#xff08;序列化&#xff0c;也称编码&#xff09;&#xff0c;并持久地保存在磁盘上或通过网络把这种二进制流传输到另一个网络…

Spring --- 创建一个Spring项目

文章目录 创建一个Maven项目添加Spring框架支持添加启动类 创建一个Maven项目 注&#xff1a;我们需要使用 Maven 来管理依赖&#xff0c;所以需要创建一个Maven项目 添加Spring框架支持 注&#xff1a; 添加这两个依赖才能正确使用 Spring在添加依赖后记得刷新&#xff0c;把依…

Vue3-Pinia

Pinia是什么 Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 比Vuex更大的优势在于&#xff1a; 1.提供更加简单的API&#xff08;去掉了mutation&#xff09; 2.提供符合&#xff0c;组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3.去掉了modules…

JOSEF 漏电继电器JHOK-ZBL1 DH-50L 系统1140V 电源AC220V

系列型号&#xff1a; JHOK-ZBL多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL1多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL2多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBM多档切换式漏电&#xff08;剩余&#xff09;继电器 …

为品质加冕 | 喜尔康智家再次斩获大奖

近日&#xff0c;被誉为“家居质量界奥斯卡”的2023年度沸腾质量奖颁奖盛典在福建厦门第三届家居质量大会同期隆重举行。现场重磅揭晓2023年沸腾质量奖测评获奖结果。 今年&#xff0c;喜尔康智能家居再接再厉&#xff0c;从数百家参评企业中脱颖而出&#xff0c;参评的智能坐便…

解锁领先的有限元分析软件ABAQUS:不同版本功能特点及价格

随着科学技术的飞速发展&#xff0c;工程领域对于高效可靠的仿真软件需求日益增长。ABAQUS作为有限元分析领域的佼佼者&#xff0c;为工程师提供了强大而灵活的工具&#xff0c;用于模拟和分析复杂的结构和材料行为。本文将深入介绍ABAQUS的概念、不同版本的特点、功能区别、定…

Baby-Step Giant-Step Homomorphic DFT

参考文献&#xff1a; [CT65] Cooley J W, Tukey J W. An algorithm for the machine calculation of complex Fourier series[J]. Mathematics of computation, 1965, 19(90): 297-301.[Shoup95] Shoup V. A new polynomial factorization algorithm and its implementation[…

LeetCode Hot100 84.柱状图中最大的矩形

题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 方法&#xff1a; 代码&#xff1a; class Solution {public int largestRectang…

WIFI HaLow技术引领智能互联,打破通信限制

在过去十年里&#xff0c;WIFI技术已在家庭和企业中建立起了庞大的网络&#xff0c;连接了数十亿智能互联设备&#xff0c;促进了信息的迅速传递。然而&#xff0c;当前的WIFI标准存在一些挑战&#xff0c;包括协议范围的限制和整体功能的受限&#xff0c;导致在较远距离进行通…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践&#xff0c;包括业务数字化和管理数字化两个方面。业务数字化方面&#xff0c;该院通过开发小工具改进工作流程。管理数字化方面&#xff0c;该院采用零代码平台集中管理管道力学信息相关模型和数据&#xff0c;并…