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

news2024/11/26 13:54:07

文章目录

  • 一、跳跃游戏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

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

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

相关文章

后端低代码平台探索总结

业务需求快速变化的背景 我们在对业务需求进行梳理后&#xff0c;在进行程序设计时&#xff0c;对于将来可能发生变化的常量、变量、阀值、开关、条件、公式等等&#xff0c;可能会配置在环境变量或数字字典来支持可配置。但是需求变化往往会更加复杂、更加不可预测&#xff0…

Java中Exception的使用方法

Exception介绍异常处理机制的优缺点常见的Exception异常处理的常见错误优雅的处理异常异常处理中存在的性能问题Java自定义异常示例 Exception介绍 在Java中&#xff0c;异常&#xff08;Exception&#xff09;是一种特殊类型的对象&#xff0c;表示程序运行过程中发生的意外或…

智慧养老:创新科技让老年生活更美好

智慧养老&#xff1a;创新科技让老年生活更美好 随着人口老龄化的加剧&#xff0c;智慧养老成为了关注焦点。智慧养老以创新科技为核心&#xff0c;旨在改善老年人的生活品质、促进健康、增强安全感和社会融入感。本文将详细介绍智慧养老的关键技术和应用场景&#xff0c;带您了…

iPhone16:首款AI iPhone?

随着科技水平的不断发展&#xff0c;智能手机逐渐成为人们最依赖的电子产品之一。为能够满足用户需求&#xff0c;手机的硬件、外观设计与性能飞速提升&#xff0c;这也导致智能手机市场快速进入到瓶颈期。 为了能够带来更优秀的表现&#xff0c;苹果可能会为iPhone 16系列带来…

黑马React:基础拓展

黑马React: D10-基础拓展 Date: December 18, 2023 useReducer 基础使用 作用: 让 React 管理多个相对关联的状态数据 补充&#xff1a;和useState的作用类似&#xff0c;用来管理相对复杂的状态数据 **特点&#xff1a;**useReducer返回值为一个数组, 可以解构处数值stat…

【具身智能评估9】Open X-Embodiment: Robotic Learning Datasets and RT-X Models

论文标题&#xff1a;Open X-Embodiment: Robotic Learning Datasets and RT-X Models 论文作者&#xff1a;– 论文原文&#xff1a;https://arxiv.org/abs/2310.08864 论文出处&#xff1a;– 论文被引&#xff1a;–&#xff08;12/18/2023&#xff09; 论文代码&#xff1a…

力扣日记12.18-【二叉树篇】合并二叉树

力扣日记&#xff1a;【二叉树篇】合并二叉树 日期&#xff1a;2023.12.18 参考&#xff1a;代码随想录、力扣 617. 合并二叉树 题目描述 难度&#xff1a;简单 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xf…

公共字段自动填充——后端

场景&#xff1a;当处理一些请求时&#xff0c;会重复的对数据库的某些字段进行赋值&#xff08;如&#xff1a;在插入和更新某个物品时&#xff0c;需要更新该物品的更新时间和更新者的信息&#xff09;&#xff0c;这样会导致代码冗余。 如&#xff1a; 思路&#xff1a; 自…

Arma3/武装突袭3东风战役最后一关游戏无法保存的解决办法

Arma3这个游戏玩进去还是非常有可玩性的&#xff0c;可是在玩过了它本体自带的东风系列战役后&#xff0c;在最精髓的最后一关——game over这个关卡&#xff0c;却有个非常头疼的问题。 逃跑其实是非常简单的&#xff0c;但是想要无伤环游全岛确十分困难&#xff0c;因为这关卡…

探索人工智能中的语言模型:原理、应用与未来发展

导言 语言模型在人工智能领域中扮演着重要的角色&#xff0c;它不仅是自然语言处理的基础&#xff0c;也是许多智能系统的核心。本文将深入研究语言模型的原理、广泛应用以及未来发展趋势。 1. 语言模型的原理 统计语言模型&#xff1a; 基于概率统计的传统语言模型&…

云原生之深入解析如何在K8S环境中使用Prometheus来监控CoreDNS指标

一、什么是 Kubernetes CoreDNS&#xff1f; CoreDNS 是 Kubernetes 环境的DNS add-on 组件&#xff0c;它是在控制平面节点中运行的组件之一&#xff0c;使其正常运行和响应是 Kubernetes 集群正常运行的关键。DNS 是每个体系结构中最敏感和最重要的服务之一。应用程序、微服…

redis:六、数据过期删除策略(惰性删除、定期删除)和基于redisson实现的分布式锁(看门狗机制、主从一致性)和面试模板

数据过期删除策略 Redis的过期删除策略&#xff1a;惰性删除 定期删除两种策略进行配合使用 惰性删除 惰性删除&#xff1a;设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们在检查其是否过期&#xff0c;如果过期&#xff0c;我们就…

转载: iOS 优雅的处理网络数据

转载&#xff1a; iOS 优雅的处理网络数据 原文链接&#xff1a;https://juejin.cn/post/6952682593372340237 相信大家平时在用 App 的时候, 往往有过这样的体验&#xff0c;那就是加载网络数据等待的时间过于漫长&#xff0c;滚动浏览时伴随着卡顿&#xff0c;甚至在没有网…

NLP论文阅读记录-ACL 2023 | 10 Best-k Search Algorithm for Neural Text Generation

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1优势2.2 挑战 三.本文方法3.1 并行探索3.2 时间衰变3.3堆修剪3.4 模型得分 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果 五 总结 前言 用于神经文本生成…

【Transformer】Transformer and BERT(1)

文章目录 TransformerBERT 太…完整了&#xff01;同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了&#xff0c;最新前沿方向 学习笔记 Transformer 无法并行&#xff0c;层数比较少 词向量生成之后&#xff0c;不会变&#xff0c;没有结合语境信息的情…

Transformer Decoder的输入

大部分引用参考了既安的https://www.zhihu.com/question/337886108/answer/893002189这篇文章&#xff0c;个人认为写的很清晰&#xff0c;此外补充了一些自己的笔记。 弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输…

支持向量机(SVM):高效分类的强大工具

文章目录 前言1. SVM的基本原理1.1 核心思想1.2 支持向量1.3 最大化建模1.4 松弛变量1.5 核函数 2. SVM与逻辑回归的区别和联系2.1 区别2.2 联系 3. SVM的应用领域3.1 图像分类3.2 文本分类3.3 生物信息学3.4 金融领域3.5 医学诊断 4. SVM的优势与挑战4.1 优势4.1.1 非线性分类…

分布式理论 | RPC | Spring Boot 整合 Dubbo + ZooKeeper

一、基础 分布式理论 什么是分布式系统&#xff1f; 在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统”&#xff1b; 分布式系统是由一组通过网络进行通信、为了完成共同的…

【02】GeoScene海图生产环境创建

1.1 海图生产环境 GeoScene中的企业级海事制图由中央航海信息系统数据库&#xff08;NIS库&#xff09;来处理&#xff0c;将之前传统桌面产品库&#xff08;PL库&#xff09;产品管理方面的能力已经移植到NIS数据库&#xff0c;以ProductDefinitions、ProductCoverage、Produ…

主从reactor多线程实现

现场模型图片&#xff0c;从网上找的 出于学习的目的实现的&#xff0c;如有不对的地方欢迎留言知道&#xff0c;简单实现了http的请求&#xff0c;可通过postman进行访问 启动项目&#xff1a; 返回数据示例 postman请求 附上源码&#xff0c;有问题直接看源码吧