【算法与数据结构】LeetCode55、45、跳跃游戏 I 、II

2023-12-19 06:36

本文主要是介绍【算法与数据结构】LeetCode55、45、跳跃游戏 I 、II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、跳跃游戏I
  • 二、跳跃游戏II
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、跳跃游戏I

在这里插入图片描述

  思路分析:本题目标是根据跳跃数组的元素,判断最终能够到达数组末端。我们引入了一个跳跃范围的概念,代表当前能够跳得到的地方,不断跟新跳跃范围,如果跳跃范围能够大于数组长度-1,说明能够到达终点。计算第一个覆盖范围,然后基于第一个覆盖范围遍历[0,cover]内的所有跳跃步数,更新跳跃范围。用到algorithm头文件中的max函数。
  程序如下

// 55、跳跃游戏1
class Solution {
public:bool canJump(vector<int>& nums) {if (nums.size() == 1) return true;int cover = 0;		for (int i = 0; i <= cover; i++) {cover = max(i + nums[i], cover);if (cover >= nums.size() - 1) return true;}return false;}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

二、跳跃游戏II

在这里插入图片描述

  思路分析:跳跃游戏II在I的基础之上需要找到到达终点的最小步数。因此,我们走的每一步都需要仔细思考,保证到达终点的步数最小。程序当中,我们计算的下一步最大覆盖范围和当前覆盖范围,遇到i=cover的情况时更新当前覆盖范围,走下一步,并判断是否到达终点。
  程序如下

// 45、跳跃游戏2
class Solution2 {
public:int jump(vector<int>& nums) {// 统计覆盖范围和下一步最大覆盖范围(循环更新)if (nums.size() == 1) return 0;int cover = 0, next_cover = 0;int result = 0;	for (int i = 0; i < nums.size(); i++) {next_cover = max(nums[i] + i, next_cover);  // 更新下一步覆盖最远距离下标if (i == cover) {							// 遇到当前覆盖最远距离下标result++;                               // 需要走下一步cover = next_cover;						// 更新当前覆盖最远距离下标if (next_cover >= nums.size() - 1) break;  // 到达终点}}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

三、完整代码

# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;// 55、跳跃游戏1
class Solution {
public:bool canJump(vector<int>& nums) {if (nums.size() == 1) return true;int cover = 0;		for (int i = 0; i <= cover; i++) {cover = max(i + nums[i], cover);if (cover >= nums.size() - 1) return true;}return false;}
};// 45、跳跃游戏2
class Solution2 {
public:int jump(vector<int>& nums) {// 统计覆盖范围和下一步最大覆盖范围(循环更新)if (nums.size() == 1) return 0;int cover = 0, next_cover = 0;int result = 0;	for (int i = 0; i < nums.size(); i++) {next_cover = max(nums[i] + i, next_cover);  // 更新下一步覆盖最远距离下标if (i == cover) {							// 遇到当前覆盖最远距离下标result++;                               // 需要走下一步cover = next_cover;						// 更新当前覆盖最远距离下标if (next_cover >= nums.size() - 1) break;  // 到达终点}}return result;}
};int main() {//vector<int> nums = { 2,3,1,1,4 };//Solution s1;//bool result = s1.canJump(nums);//cout << result << endl;//system("pause");//return 0;//vector<int> nums = { 2,3,1,1,4 }; // 2步,统计一次下一步最大覆盖范围vector<int> nums = { 1,2 };		// 1步,没有统计,cover就满足了//vector<int> nums = { 0 };Solution2 s2;int result = s2.jump(nums);cout << result << endl;system("pause");return 0;
}

end

这篇关于【算法与数据结构】LeetCode55、45、跳跃游戏 I 、II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511218

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3