力扣面试经典算法150题:跳跃游戏

news2024/11/24 5:25:58

跳跃游戏

今天的题目是力扣面试经典150题中的数组的中等难度题:跳跃游戏。

题目链接:https://leetcode.cn/problems/jump-game/description/?envType=study-plan-v2&envId=top-interview-150

题目描述

给定一个非负整数数组 nums,你最初位于数组的 第一个下标,即 nums[0] 。数组中的每个元素代表一个障碍的高度。

你想要到达最后一个下标,但是除了从下标 i 跳到下标 i + nums[i] 之外,你不能跳过任何下标。

确定你是否能够到达最后一个下标。

  • 示例 1:

    • 输入: [2,3,1,1,4]
    • 输出: true
  • 示例 2:

    • 输入: [3,2,1,0,4]
    • 输出: false

题目分析

题目要求我们判断在一个障碍高度数组中,从起点能否跳到最后一个位置。

题目的意思就是给定一个数组,我们从数组的第一个下标位置开始,根据下标元素的值x,我们可以向前移动下标,移动区间为(1,x]。如果当下下标的值是0,那么将无法向前移动,这个时候跳跃游戏结束,结束时所在下标如果不是最后一个下标,就返回false。

解题思路

这种情况我们可以直接考虑贪心算法,就是每次都走最大步,看看能不能出去游戏。

首先我们定义一个最大移动距离,初始值时0,因为还没有开始移动。

开始进行循环,从第一个元素开始。

当第一个值时0且长度大于1时,可以直接返回,因为无法移动。

定义结束条件,当你最大移动的距离小于当前下标的值,说明你已经无法移动了,可以直接返回false。

下面我们需要更新最大距离。在每次都走最大步长的情况下,最大距离就等于下标的值加上元素的值,这个时候与当前的距离取大即可。

最后看看如果当前最大距离已经超过了数组长度,说明已经到了终点,返回true。

实际算法代码
以下是使用上述思路的 Java 实现:

public class JumpGame {

	public static void main(String[] args) {
        JumpGame solution = new JumpGame();
        int[] nums1 = {2, 3, 1, 1, 4};
        int[] nums2 = {3, 2, 1, 0, 4};
        System.out.println(solution.canJump(nums1)); // 输出: true
        System.out.println(solution.canJump(nums2)); // 输出: false
    }

    public boolean canJump(int[] nums) {
        int maxReach = 0;
        if (nums.length == 1) {
			return true;
		}
        for (int i = 0; i < nums.length; i++) {
        	if (nums.length > 1 && num[i] == 0) {
				return false;
			}
            if (i > maxReach) {
                return false;
            }
            maxReach = Math.max(maxReach, i + nums[i]);
            if (maxReach >= nums.length - 1) {
                return true;
            }
        }
        return maxReach >= nums.length - 1;
    }
}

结果

执行程序,测试通过:
在这里插入图片描述

提交到力扣,也通过,并且表现不错。

在这里插入图片描述

总结

又是使用贪心算法的一天。这个题目和股票买卖的有一个共同点,也是常见使用贪心算法的场景。那就是通过局部的最优解进而实现整体的最优解。

在股票买卖中,我们通过每次都能获取利润从而获取最大的利润,在今天的跳跃游戏中,我们每次都走最远从而跳出数组。学会从题目归纳场景,在用场景归纳出解题思路,这是刷算法要得到的收获,不是做完题目就行,归纳总结,这是才是正经学习!

加油!!!

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

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

相关文章

PHPStorm如何使用Phalcon框架的依赖

问题背景 在上一篇文章里面写的如何把Phalcon 集成到PhpStorm里面,发现有个地方讲得不是很清楚,就是在使用Phalcon开发的过程中,会发现没有Phalcon框架的代码提示,这个让人感到很难受,写代码的效率也会降低不少。当时讲得是在项目的外部库下导入依赖源, 然后在写代码的时…

解决Win复制到U盘文件在KylinOS不显示

解决Win复制到U盘文件在KylinOS不显示 1、步骤一&#xff1a;识别U盘2、步骤二&#xff1a;格式化U盘3、步骤三&#xff1a;验证4、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在日常使用中&#xff0c;我们可能会遇到这样的情…

Sentinel-1 Level 1数据处理的详细算法定义(六)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…

Nginx服务优化的12个指南:提升性能与稳定性

Nginx服务优化的12个指南&#xff1a;提升性能与稳定性 一、配置Proxy缓存二、开启静态页面压缩三、调整工作进程个数四、调整CPU亲和力五、修改文件打开数限制六、修改单个Worker的最大连接数七、开启高效传输八、设置连接超时时间九、优化FastCGI配置十、Expires缓存调优十一…

ArrayList练习(学生对象遍历,添加对象并判断是否存在)

package ArrayListDemo;public class Student {//1.私有化成员变量private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name)…

图算法-贪心策略-最小生成树(prim)和最短路径(dijkstra)

参考来源&#xff1a;和感谢 1.代码随想录 (programmercarl.com) 2.【图-最小生成树-Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法】https://www.bilibili.com/video/BV1wG411z79G?vd_source0ddb24a02523448baa69b0b871ab50f7 3.【图-最短路径-Dijkstra(迪杰斯特拉)算法】ht…

【数字化时代的技术挑战与应对策略】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

java基础 之 常用遍历方法

文章目录 准备工作一、普通遍历循环二、增强for三、forEach四、迭代器五、总结六、代码奉上 准备工作 准备工作&#xff1a;我们需要创建一个数组&#xff0c;两个列表&#xff0c;一个字符串和一个set集合&#xff0c;如下图所示 一、普通遍历循环 说明&#xff1a; 1、使…

吴恩达机器学习课后题-02逻辑回归

逻辑回归 逻辑回归基本知识点&#xff1a;分类Cost function(代价函数)梯度下降 题目线性可分散点图决策边界 线性不可分题目特征映射代价函数&#xff08;损失函数&#xff09;梯度下降结果 逻辑回归基本知识点&#xff1a;分类 Cost function(代价函数) 梯度下降 题目 线性可…

Upload-Lab第16关:巧妙利用图片马方式绕过exif_imagetype验证

简介 在第16关中,解决方法与第14和第15关类似,都是通过修改文件头来绕过文件上传验证。然而,第16关额外使用了 php_exif模块对文件进行校验。因此,在尝试解决这一关时,需要确保php_exif模块已启用,如下图所示: php_exif.dll–找不到指定的模块 要想php_exif能够被成功…

Github 2024-08-22 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1精选Go框架、库和软件列表 创建周期:3700 天开发语言:Go协议类型:MIT LicenseStar数量:127377 个Fork数量:11751 …

ardupilot开发 --- C嘎嘎 篇

无情的猜猜猜又卜了一挂 cout和cin的使用&#xff0c;标准输入输出<< 和 >> 的使用数据类型&#xff08;函数&#xff09;模板的使用&#xff1a;命名空间的使用&#xff0c;std命名空间语句块new 的使用引用 &共用体union类对象的赋值&#xff1a;operator函数…

实现 FastCGI

CGI的由来&#xff1a; 最早的 Web 服务器只能简单地响应浏览器发来的 HTTP 请求&#xff0c;并将存储在服务器上的 HTML 文件返回给浏 览器&#xff0c;也就是静态 html 文件&#xff0c;但是后期随着网站功能增多网站开发也越来越复杂&#xff0c;以至于出现动态技 术&…

仿Muduo库实现高并发服务器——Connection模块

这个模块看着代码挺多的实则真的很多&#xff0c;但是不难&#xff0c;我为大家将各个函数拿出来理一理。 connection就是将主线程监听的网络套接字上的客户端套接字进行包装&#xff0c;使被包装的套接字可以进行&#xff0c;各种事件的处理&#xff0c;比如读写事件。下面就来…

3D场景标注标签信息,three.js CSS 2D渲染器CSS2DRenderer、CSS 3D渲染器CSS3DRenderer(结合react)

如果你想用HTML元素作为标签标注三维场景中模型信息&#xff0c;需要考虑定位的问题。比如一个模型&#xff0c;在代码中你可以知道它的局部坐标或世界坐标xyz&#xff0c;但是你并不知道渲染后在canvas画布上位置&#xff0c;距离web页面顶部top和左侧的像素px值。自己写代码把…

探秘黑魔术玫瑰:花语与魅力的交织

一、黑魔术玫瑰的花语解读 黑魔术玫瑰的花语丰富而深邃&#xff0c;充满了神秘与诱惑。在许多文化中&#xff0c;其深沉的颜色被赋予了神秘的象征意义&#xff0c;代表着那些尚未被揭示的秘密和未知的领域。它仿佛是隐藏在黑暗中的谜题&#xff0c;吸引着人们去探索和追寻。 禁…

plsql表格怎么显示中文 plsql如何导入表格数据

在Oracle数据库开发中&#xff0c;PL/SQL Developer是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时&#xff0c;许多用户会遇到表格显示中文的问题&#xff0c;以…

DRF——请求的封装与版本管理

文章目录 django restframework1. 快速上手2. 请求数据的封装3. 版本管理3.1 URL的GET参数传递&#xff08;*&#xff09;3.2 URL路径传递&#xff08;*&#xff09;3.3 请求头传递3.4 二级域名传递3.5 路由的namespace传递 小结 django restframework 快速上手请求的封装版本…

SQL,解析 json

Google BigQuery数据库的data表存储了若干多层的Json串&#xff0c;其中一条形如&#xff1a; [{"active":true,"key":"key1","values":[{"active":true,"value":"value1"}]},{"active":tru…

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…