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

跳跃游戏

今天的题目是力扣面试经典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)); // 输出: trueSystem.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.mzph.cn/news/877970.shtml

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

相关文章

uniapp/uniapp x总结

uni-app组成和跨端原理 上图所诉 App的渲染引擎&#xff1a;同时提供了2套渲染引擎&#xff0c;.vue页面文件由webview渲染&#xff0c;原理与小程序相同&#xff1b;.nvue页面文件由原生渲染&#xff0c;原理与react native相同。开发者可以根据需要自主选择渲染引擎。 uniapp…

R语言中theme的调整技巧汇总-持续更新

1.如何扩充图片的上右下左位置的空白区域&#xff1a; unit(c(1.1, 1, 0.4, 0.5), “cm”) 表示使用厘米作为单位设置各个方向的边距&#xff0c;c(1.1, 1, 0.4, 0.5) 对应的顺序是&#xff1a;上、右、下、左。 theme(plot.margin unit(c(1.1, 1, 0.4, 0.5), "cm")…

android gradle.properties 的作用

android gradle.properties 的作用 1 将多个应用程序打包成一个单一的应用程序&#xff08;超级应用或聚合应用&#xff09;在里面配置打包的版本&#xff0c;版本号&#xff0c;比如 version_code110 RELEASE_VERSION3.0.5 DEFAULT_BUILD_TYPE_NAMERelease 2 配置一些在线库&a…

微信小程序uni :class不支持xxx语法

问题代码&#xff1a; <view class"cellTop"><view>{{list.payTime}}</view><view :class"payStatusClass${list.payStatus}">{{payStatusDe[list.payStatus]}}</view></view> .payStatusClass1{color: rgb(246, 122,…

C# lambda 表达式 和 闭包的概念

目录 lambda表达式 闭包 内层的函数可以引用包含在它外层的函数的变量 即使外层函数的执行已经终止 注意&#xff1a; 该变量提供的值并非变量创建时的值&#xff0c;而是在父函数范围内的最终值。 class Program { public static void Main() { Test t…

鸿蒙HarmonyOS开发:创建新的Lite工程

当开始开发一个应用/服务时&#xff0c;首先需要根据工程创建向导&#xff0c;创建一个新的工程&#xff0c;工具会自动生成对应的代码和资源模板。 说明 在运行DevEco Studio工程时&#xff0c;建议每一个运行窗口有2GB以上的可用内存空间。 创建和配置新工程 DevEco Studio提…

Kubernetes中如何对etcd进行备份和还原

一、etcd备份 准备环境 确认etcd版本&#xff0c;确保etcdctl客户端与服务器版本兼容。获取etcd证书和密钥&#xff0c;如果集群使用了TLS加密。设置etcdctl环境变量&#xff0c;如ETCDCTL_API3&#xff08;指定使用etcd v3 API&#xff09;。 执行备份命令 使用etcdctl的snap…

TCP/IP和SNMP

目录 前言 一、TCP/IP (Transmission Control Protocol/Internet Protocol) 1. TCP/IP概述 2. TCP/IP的分层结构 3. TCP和UDP的对比 4. IP地址和子网划分 二、SNMP (Simple Network Management Protocol) 1. SNMP概述 2. SNMP的组成部分 3. SNMP操作 4. SNMP版本 5…

【图文并茂】ant design pro 如何对接后端个人信息接口

上一节我们有讲到如何对接登录接口的 【图文并茂】ant design pro 如何对接登录接口 仅仅能登录是最基本的&#xff0c;但是我们要进入后台还是需要另一个接口。 这个接口有两个作用&#xff1a; 来获取当前登录账号的信息&#xff0c;比如头像&#xff0c;用户名&#xff0…

Springsecurity中的Eureka报错:Cannot execute request on any known server

完整报错信息&#xff1a; com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 报错体现&#xff1a; 访问eureka控制面板&#xff1a; 访问测试地址&#xff1a; 控制台报错&#xff1a; 可能的报错原因&#xff…

【YOLOv8改进[Conv]】 感受野注意力卷积RFAConv(2024.3)| 使用RFAConv改进C2f + 含全部代码和详细修改方式

本文将进行在YOLOv8中使用 感受野注意力卷积RFAConv改进C2f 的实践,助力YOLOv8目标检测效果,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后

Java的GC(Garbage Collection,垃圾回收)

Java的GC&#xff08;Garbage Collection&#xff0c;垃圾回收&#xff09;机制是Java虚拟机&#xff08;JVM&#xff09;中的一个重要功能&#xff0c;用于自动管理堆内存中不再使用的对象&#xff0c;释放其占用的内存空间&#xff0c;以避免内存泄漏和溢出。以下是对Java GC…

WEB渗透免杀篇-Golang免杀

全套完整笔记 渗透测试60w字全套md笔记&#xff1a;夸克网盘分享 往期文章 WEB渗透免杀篇-免杀工具全集-CSDN博客 WEB渗透免杀篇-加载器免杀-CSDN博客 WEB渗透免杀篇-分块免杀-CSDN博客 WEB渗透免杀篇-Powershell免杀-CSDN博客 WEB渗透免杀篇-Python源码免杀-CSDN博客 …

快手小店自动回复机器人脚本

快手小店自动回复机器人是一种利用人工智能AI技术&#xff0c;能够根据用户的会话咨询内容自动回复的工具。这种机器人可以帮助快手小店主快速、高效地回复客户消息&#xff0c;提升店铺的客户服务质量和销售效率。 甜羊浏览器是一款基于Chromium内核开发的国产浏览器&#xff…

wpf DynamicResource的ResourceKey值进行绑定

wpf 中的DynamicResource 的ResourceKey不支持绑定的&#xff0c;因为它不是个DependencyProperty&#xff0c;但又想动态指定ResourceKey 场景&#xff1a; Name属性有多个值 zhangsan,lisi,wangwu 对应不同资源文件中的 // style1<sys:String x:Key"zhangsan"…

Java里面的::是什么意思

在Java中&#xff0c;:: 是方法引用&#xff08;Method References&#xff09;的符号。方法引用提供了一种更简洁的方式来引用已存在的方法或构造函数。这种特性是在Java 8中引入的&#xff0c;作为Lambda表达式的一个补充&#xff0c;旨在让代码更加简洁和易于理解。 方法引…

解决html中文乱码问题

在head上面添加 <% page contentType"text/html;charsetUTF-8" language"java" %>

怎么写spring security的账号密码成功失败处理器并且加一个验证码过滤器

spring security他是自带一个页面的,如果我们没有页面的话,他会进行一个账号密码的校验,成功就会走成功的处理器,失败就会走失败的处理器 成功处理器 package com.lzy.security;import cn.hutool.json.JSONUtil; import com.lzy.common.lang.Result; import org.springframew…

大模型之二十六-Diffusion model实例浅析

在2022年&#xff0c;midjourney、DALL-E以及Stable Diffusion三个文生图模型引爆了机器生产文生图领域&#xff0c;他们的模型能够在可控条件&#xff08;标签、文本描述&#xff09;下生成高分辨率、细节丰富的多样性图像&#xff0c;这在视觉上往往难以与真实图像区分。本文…

python 实现 hidden layers neural network浅层神经网络算法

hidden layers neural network浅层神经网络算法介绍 浅层神经网络&#xff08;Shallow Neural Network&#xff09;&#xff0c;也称为单隐层神经网络&#xff08;a single hidden layer neural network&#xff09;&#xff0c;是一种包含输入层、一个隐藏层和输出层的神经网…