跳跃游戏,经典算法实战。

在这里插入图片描述

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。

🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。

🎉欢迎 👍点赞✍评论⭐收藏

在这里插入图片描述

🔎 算法领域知识 🔎

链接专栏
分发糖果算法专栏
买卖股票的最佳时机算法专栏
跳跃游戏算法专栏

经典算法题 之 买卖股票的最佳时机

在这里插入图片描述

题目如下:

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 13 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 105

解答这道题,可以使用 贪心算法 进行解决。

为了判断是否能够到达最后一个下标,我们可以使用贪心算法的思想来实现。贪心算法的基本思想是每一步都选择当前能够跳跃最远的位置。

具体实现逻辑如下:

  1. 初始化一个变量 maxPosition 为 0,表示当前能够跳跃的最远位置。
  2. 遍历数组 nums,对于当前位置 i,判断是否超过了当前能够跳跃的最远位置 maxPosition,如果超过了,则说明无法到达最后一个下标,返回 false
  3. 更新 maxPosition 为当前位置 i 和当前位置能够跳跃的最大长度之和中的较大值。
  4. 如果最后 maxPosition 大于等于数组的最后一个下标(即 nums.length - 1),则说明能够到达最后一个下标,返回 true;否则,返回 false

以下是用Java代码实现的示例:

public class Solution {public boolean canJump(int[] nums) {int maxPosition = 0;for (int i = 0; i < nums.length; i++) {if (i > maxPosition) {return false;}maxPosition = Math.max(maxPosition, i + nums[i]);}return maxPosition >= nums.length - 1;}
}public class Main {public static void main(String[] args) {Solution solution = new Solution();int[] nums = {2, 3, 1, 1, 4};boolean result = solution.canJump(nums);System.out.println(result); // 输出 trueint[] nums2 = {3, 2, 1, 0, 4};boolean result2 = solution.canJump(nums2);System.out.println(result2); // 输出 false}
}

在上面的代码中,我们首先定义了一个 Solution 类,其中包含了 canJump 方法,用于判断是否能够到达最后一个下标。然后,在 Main 类的 main 方法中,我们创建了一个 Solution 对象,并对示例数组 numsnums2 分别调用 canJump 方法,并打印出结果。

执行过程如下:

  1. 首先,将 nums 传入 canJump 方法中。
  2. canJump 方法中,初始化 maxPosition 为 0。
  3. 进入循环,此时 i 为 0,判断是否超过了 maxPosition,因为初始时 maxPosition 为 0,所以不超过。
  4. 更新 maxPosition 为 0 和 i + nums[i] 的较大值,即 0 和 2,所以 maxPosition 更新为 2。
  5. 继续下一轮循环,此时 i 为 1,判断是否超过了 maxPosition,因为此时 i 为 1,而 maxPosition 为 2,所以不超过。
  6. 更新 maxPosition 为 2 和 i + nums[i] 的较大值,即 2 和 1 + 3,所以 maxPosition 更新为 4。
  7. 继续下一轮循环,此时 i 为 2,判断是否超过了 maxPosition,因为此时 i 为 2,而 maxPosition 为 4,所以不超过。
  8. 更新 maxPosition 为 4 和 i + nums[i] 的较大值,即 4 和 2 + 1,所以 maxPosition 仍然为 4。
  9. 继续下一轮循环,此时 i 为 3,判断是否超过了 maxPosition,因为此时 i 为 3,而 maxPosition 为 4,所以不超过。
  10. 更新 maxPosition 为 4 和 i + nums[i] 的较大值,即 4 和 3 + 1,所以 maxPosition 仍然为 4。
  11. 继续下一轮循环,此时 i 为 4,判断是否超过了 maxPosition,因为此时 i 为 4,而 maxPosition 为 4,所以不超过。
  12. 更新 maxPosition 为 4 和 i + nums[i] 的较大值,即 4 和 4 + 4,所以 maxPosition 更新为 8。
  13. 循环结束,因为 maxPosition 大于等于数组的最后一个下标,即 4,所以返回 true

对于示例数组 nums2,执行过程类似,只是在第四步时 maxPosition 更新为 3,此时无法到达最后一个下标,因此返回 false

通过这个示例题目,你可以练习使用贪心算法来解决实际问题,并且可以加深对Java代码实现的掌握。希望这个例子能够帮助你更好地理解算法和数据结构的基本原理和应用。

🏆关注作者,普修罗双战士,给你不一样的技术体验,一起在技术领域扶摇直上九万里,共筑坚如磐石的权。

🎉欢迎 👍点赞✍评论⭐收藏

在这里插入图片描述

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

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

相关文章

AES加解密模式

要想学习AES&#xff0c;首先要清楚三个基本的概念&#xff1a;密钥、填充、模式。 1、密钥 密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称&#xff0c;是因为这类算法对明文的加密和解密需要使用同一个密钥。 AES支持三种长度的密钥&#xff1a; 128位&#xff…

(十)IIC总线-PCF8591-ADC/DAC

文章目录 IIC总线篇起始&#xff0c;终止信号应答信号发送&#xff0c;读取数据IIC通讯规则 PCF8591-ADC-DAC篇特性一般说明地址Control byte&#xff08;控制字&#xff09;简单了解一下DAC电阻分隔链应用为王DAC的应用ADC的应用ADC采集特点ADC读模式 ADC现象演示DAC现象演示 …

使用Python爬取小红书笔记与评论(js注入方式获取x-s)

文章目录 1. 写在前面2. 分析加密入口3. 使用JS注入4. 爬虫工程化 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感…

Cesium 实战 - 模型亮度调整,自定义着色器(CustomShader)完美解决模型太暗的问题

Cesium 实战 - 自定义视频标签展示视频 模型变暗问题以往通过光线解决问题模型变暗原理解决问题完整代码在线示例在 Cesium 项目中,添加模型是比较基础的功能,Cesium 支持 glTF(GBL) 格式。 在实际应用中,经常会遇到模型特别暗的情况,对比而言,其他三维环境添加是正常的…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-5稳定性stability-李雅普诺夫Lyapunov Stability in the sense of Lyapunov Assympototic Stability

怎么做微信秒活动_掀起购物狂潮,引爆品牌影响力

微信秒杀活动&#xff1a;掀起购物狂潮&#xff0c;引爆品牌影响力 在数字化时代&#xff0c;微信已经成为人们日常生活中不可或缺的一部分。作为中国最大的社交媒体平台&#xff0c;微信不仅为人们提供了便捷的通讯方式&#xff0c;还为商家提供了一个广阔的营销舞台。其中&a…

基于SpringBoot的医护人员排班系统(代码+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目 希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一、研究背景 1.1 研究背景 随…

Visual Studio 2017 “无法查找或打开PDB文件“ 解决方法

运行的时候提示无法查找或打开PDB文件 解决办法&#xff08;注意&#xff1a;必须使用管理员身份运行VS&#xff09; 第一步 打开调试窗口的选项 第二步 调试——>常规——>勾选启用源服务器支持 它会弹出警告窗口&#xff0c;点“是”即可 第三步 调试——>符号——…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时&#xff0c;我是用的是极狐官网推荐安装的步骤&#xff0c;具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

华为OD机试 - 反射计数(Java JS Python C)

题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体经过 0 还是 1,都不影响其速度。 请计算并给出经过 t 时间单位后,物体经过 1 点的次数。 矩阵以左…

web网页首页布局

效果展示&#xff1a; html代码&#xff1a; <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta name"viewport" content&qu…

【C语言题解】 | 144. 二叉树的前序遍历

144. 二叉树的前序遍历 144. 二叉树的前序遍历代码 144. 二叉树的前序遍历 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 函数原型&#xff1a; int* preorderTraversal(struct TreeNode* root, int* returnSize) {首先先观察一下这个函数原型&#xff0c;TreeNode* roo…

亿胜盈科HT4822 160mW免输出电容立体声耳机放大器

HT4822是一款无需输出隔直电容的立体声耳机放大器。支持差分和单端的模拟信号输入。 在3.6V供电下&#xff0c;THDN 1%&#xff0c;32ohm负载时能提供80mW的输出。其具有低至0.007%的THDN。 HT4822能在2.5V-6.0V电源条件下工作&#xff0c;具有过热保护和欠压保护等功能。 …

记录一次数据中包含转义字符\引发的bug

后端返回给前端的数据是: { "bizObj": { "current": 1, "orders": [ ], "pages": 2, "records": [ { "from": "1d85b8a4bd33aaf99adc2e71ef02960e", …

deepin安装protobuf(3.22前版本可以使用此方法安装)

deepin安装protobuf 下载protobuf编译安装 下载protobuf protobuf版本&#xff1a;https://github.com/protocolbuffers/protobuf/releases 选择你要下载的版本我这里使用的是这个URL&#xff1a;https://github.com/protocolbuffers/protobuf/releases/v21.12 点击下载的版…

多协议数据库Navicat Premium中文

Navicat Premium是一款强大的数据库管理和开发工具&#xff0c;支持多种数据库系统&#xff0c;如MySQL、Oracle、SQL Server、PostgreSQL等。它提供了一个直观的图形用户界面&#xff0c;使开发者可以轻松地创建、管理和维护数据库。Navicat Premium具有强大的数据建模、查询、…

java JDBC 连接数据库(增删查改)

必须先插入工具包 代码 public static void main(String[] args) {DataSource ds JdbcHelper.getDs();System.out.println(ds);JdbcTemplate jdbcTemplatenew JdbcTemplate(ds);System.out.println(jdbcTemplate);//新增String sql1"insert into biao values(null,?,?,…

高阶智驾,开打「硬核」战

一直以来&#xff0c;高阶智驾的「规模化普及」何时到来&#xff0c;硬件的「军备竞赛」和系统「降本增效」长期处于博弈状态。 其中&#xff0c;作为关键环节之一&#xff0c;传感器配置以及相应的感知算法技术迭代升级是最具看点的部分。以特斯拉、百度Apollo为代表的纯视觉技…

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

【GO语言依赖】Go语言依赖管理简述

在运行环境中&#xff0c;遭遇报错&#xff0c;显示找不到函数 经过研究后发现需要进行依赖管理&#xff0c;进行如下操作后解决&#xff1a; 起源 最早的时候&#xff0c;Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如…