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

在这里插入图片描述

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

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

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

在这里插入图片描述

🔎 算法领域知识 🔎

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

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

在这里插入图片描述

题目如下:

给你一个非负整数数组 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.hqwc.cn/news/343293.html

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

相关文章

从“唯分论”到“过程评价” 助力教育高质量发展

近日,为推动教育评价改革工作高质量发展,山东省委办公厅、省政府办公厅印发《关于进一步推进教育评价改革工作的若干措施》,从学校评价改革、学生评价改革等6方面共提出25条举措,对教育评价改革进行了全面部署。 教育评价改革是教育改革的“牛鼻子”,为教育发展提供了明确的方…

通过232转Profinet将霍尼韦尔扫码枪连接到PLC上

在工业自动化领域中&#xff0c;将设备连接到PLC是非常常见的需求。本文介绍的是通过232转Profinet&#xff08;XD-PNR200&#xff09;网关的方式&#xff0c;将霍尼韦尔扫码枪与PLC连接连接并通讯。 首先&#xff0c;我们需要了解232和Profinet这两种通信协议。232是一种串口通…

Jmeter测试关联接口

Jmeter用于接口测试时&#xff0c;后一个接口经常需要用到前一次接口返回的结果&#xff0c;本文主要介绍jmeter通过正则表达式提取器来实现接口关联的方式&#xff0c;可供参考。 一、实例场景&#xff1a; 有如下两个接口&#xff0c;通过正则表达式提取器&#xff0c;将第…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷①

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回文字“xa*a*b的值&#xff1a;”和x的值&#xff1b;返回文字“xa-b的值&#xff1a;”和x的值&#xff1b;返回文字“xab的值&#xff1a;”和x的值。其中变量a、b均须为整型…

大厂设计师都在用Figma中文替代

设计原型别再只知道 Figma 了&#xff0c;现在百万设计师都在用 Figma 的中文替代——即时设计。即时设计是国内第一款基于 Web 的 UI 设计工具&#xff0c;它的出现的弥补了很多 Figma 在国内使用的局限性&#xff0c;凭借本土化的优势&#xff0c;免费使用的版本、丰富免费的…

linux 内存

linux内存分类 按用途分 stack heap(brk,sbrk , mmap), 文件映射&#xff0c; bss&#xff0c; data , text, 还有page cache&#xff0c; slab&#xff08;kmalloc连续&#xff09;, vmalloc等内核深处的。 属性 进程OOM 对于进程来说&#xff0c;堆泄漏在死亡时是没问题 但…

最佳解决方案:如何在网络爬虫中解决验证码

Captcha&#xff08;全自动区分计算机和人类的公开图灵测试&#xff09;是广泛应用的安全措施&#xff0c;用于区分合法的人类用户和自动化机器人。它通过呈现复杂的挑战&#xff0c;包括视觉上扭曲的文本、复杂的图像或复杂的拼图等方式&#xff0c;要求用户成功解决这些挑战以…

MySQL中约束是什么?

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

智慧厂区烟火识别系统应用

在当今的智能制造行业中&#xff0c;安全管理已成为优先考虑的重要议题。集度汽车公司在其实验室场区引入了一项创新技术——富维图像厂区烟火识别系统。这个项目的核心是利用先进的烟火识别系统&#xff0c;保障厂区的安全与稳定运行。 系统特点 烟火识别系统的准确率高和误报…

地理信息(gis)专业的同学,毕业后都做了什么工作?

总结&#xff1a;能转码的就转码&#xff0c;不能转码也得往开发靠。 但是没有对比&#xff0c;哪来最优选&#xff1f; 下面给大家分享下GIS职业发展路线&#xff0c;让你对你的职业规划有所启发&#xff0c;走出属于自己的路。 更详细的岗位分类和说明&#xff0c;在这个表…

【IDEA--dubug相关】-- 1. 取消debug的所有断点 2. debug侧边栏消失问题

下面是一些经常在日常debug时用到的场景&#xff0c;方便查看、与君共勉&#xff01; 文章目录 1. 如何取消所有断点2. debug底部左边侧边栏消失 1. 如何取消所有断点 如图我们可能在项目中给很多代码行添加了断点&#xff0c;一个一个点取消麻烦 在debug运行中点击选中底部…

开源Bluespec bsc编译器和可重用示例设计

这篇介绍Bluespec以及设计示例的文章&#xff0c;是在2021年ICCAD&#xff08;International Conference On Computer-Aided Design&#xff09;发布的论文。达坦科技的open-rdma项目和推广的MIT体系结构学习社区都用到Bluespec&#xff0c;因此将此论文翻译成中文&#xff0c;…