跳跃游戏-java

  • 题目描述:

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

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

  • 解题思想: 
    • 这个问题可以使用贪心算法来解决。贪心算法的思想是每一步都选择当前最优的解决方案,从而希望最终能够得到全局最优解。

      具体来说,我们可以从数组的第一个位置开始,依次遍历数组中的每个元素,同时记录当前能够到达的最远位置。在遍历过程中,如果当前位置超过了最远位置,说明无法继续前进,即无法到达最后一个下标,返回 false。否则,更新最远位置为当前位置能够到达的最远距离。当遍历结束时,如果最远位置已经超过或等于数组的最后一个下标,则说明可以到达最后一个下标,返回 true。

      下面是该思路的伪代码实现:

      1. 初始化最远位置为0
      2. 遍历数组中的每个元素,索引记为i:a. 如果当前位置i超过了最远位置,则返回falseb. 否则,更新最远位置为 max(最远位置, i + nums[i])
      3. 当遍历结束时,如果最远位置已经超过或等于数组的最后一个下标,则返回true,否则返回false

      这样实现的时间复杂度为O(n),其中n是数组的长度。因此,该方法具有较高的效率。

  •  法一:
    • 解题步骤:
    • 判断在给定的数组中,是否存在一种方式可以从第一个位置跳跃到最后一个位置。其核心思想在于通过维护一个变量 reach,表示当前能够到达的最远位置。

      在遍历数组过程中,对于每个位置 i,首先检查当前位置 i 是否已经超过了 reach,若是,则意味着无法从当前位置跳到末尾,因此直接返回 false。然后再检查当前 reach 是否已经能够到达或超过数组的末尾位置,若是,则表示已经找到了一种跳跃方式能够到达末尾,直接返回 true。

      如果以上两个条件都不满足,则更新 reach,取当前位置 i 能够到达的最远位置和当前 reach 的较大值,确保在遍历过程中始终维护着能够到达的最远位置。

      如果遍历完整个数组都没有返回 true,那么表示无法从起始位置跳跃到末尾位置,最终返回 false。

      这个算法的关键在于贪心地选择当前能够到达的最远位置,并在遍历过程中不断更新这个最远位置,以便判断是否能够到达数组的末尾。

    • 以下是代码实现:

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

                

      • 法二: 

        • class Solution {public boolean canJump(int[] nums){int end = nums.length - 1;for (int i = nums.length - 2; i >= 0; i--) {if(i + nums[i] >= end)end = i;}return end == 0;}
          }

        • 使用一个变量 end 来表示当前能够到达的最远位置,初始化为数组的最后一个索引 nums.length - 1
        • 从数组的倒数第二个位置开始向前遍历,对于每个位置 i
          • 如果当前位置 i 能够跳跃到 end 或更远的位置,则更新 end 为当前位置 i
        • 这个算法的思想是从右向左遍历数组,不断更新能够到达的最远位置 end,如果最终 end 的值为0,则说明能够从起始位置跳跃到末尾位置,否则无法到达末尾。这与之前的算法思路相似,只是采用了从右向左的遍历方式。

        • 如果最终 end 的值为0,则表示从起始位置能够跳跃到末尾位置,返回 true;否则返回 false。 
  •                                以上是本篇博客的全部内容,感谢观看.

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

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

相关文章

scGRN:人与鼠的GRN平台

基因调控网络GRN是包含转录因子TFs与其下游靶基因之间的调控相互作用的可解释图模型。了解GRN的拓扑结构和动力学是解释疾病病因机制和将相应发现转化为新疗法的基础。单细胞多组学技术的最新进展促使从单细胞转录组学和表观基因组学数据中以前所未有的分辨率推断GRN。在这里&a…

HTX Ventures:为什么BounceBit可能成为新的BTC生态解决方案?

随着BTC现货ETF的通过&#xff0c;全球各大机构和个人都在不断加码对BTC的持仓&#xff0c;BTC价格也随之上升&#xff0c;目前已上升至全球市值排名前十的资产。在本轮市场周期中&#xff0c;BTC铭文和BTC扩容是两个被市场高度关注的细分赛道。BTC生态资产的多元化收益探索正在…

【Godot4自学手册】第三十一节使用WorldEnvironment为地宫入口粒子系统添加辉光

本节&#xff0c;首先我将使用WorldEnvironment节点为地宫入口的例子系统添加辉光&#xff0c;让游戏看上去效果更加灿烂。其次加入相应提示信息&#xff0c;白天到达地宫附近、未杀死怪物进入地宫&#xff0c;都有提示信息&#xff0c;达到条件后地宫方可进入。先看一下效果&a…

关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

前面提到的普通的滚动更新&#xff0c;都是修改完sts立即就会发生更新操作 而还有一种更新的策略为&#xff0c; OnDelete&#xff0c;即只有在 pod 被删除时会进行更新操作 还是先看一下web这个sts的当前更新策略如下&#xff1a; 这里我们修改&#xff0c;更新策略&#xf…

Rsyslog 日志集中管理实验

1.使用 进行日志集中管理 C/S 架构&#xff1a;客户端将其日志上传到服务器端&#xff0c;通过对服务器端日志的查询&#xff0c;来实现对其他客户端的日志进行集中管理 2.两台机器&#xff1a; &#xff08;server&#xff09;host-5(192.168.1.2)<------------>(192…

Android14之深入理解sp模板类(二百零二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

realsense标定

简介 参考&#xff1a; camera_calibration/Tutorials/MonocularCalibration - ROS Wiki 结果如下&#xff1a; 具体操作 安装 ros安装 先是安装ros 使用鱼香ros一键安装 推荐换源&#xff0c;哪怕有魔法 小鱼的一键安装系列 | 鱼香ROS wget http://fishros.com/inst…

<QT基础(4)>QLabel使用笔记

Label 前面的文章里面把QLabel批量引入ScrollArea作为预览窗口&#xff0c;这篇把图像填充到QLable的PixelMap展示指定图像。 参数设置 设置QLabel的大小格式 QWidget* widget new QWidget; widget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); widget->…

第二百三十回

文章目录 概念介绍添加方法示例代码指示器联动 我们在前面章回中介绍了PageView这个Widget,本章回中将介绍如何给PageView添加指示器.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的指示器表示PageView底部的小圆圈&#xff0c;它用来指示当前哪个页…

集合,排序查找算法,可变参数

文章目录 集合Set集合TreeSet集合 Map集合概述特点子类及其底层数据结构常用方法遍历 数据结构常见的数据结构二叉树 可变参数介绍格式注意 Collections工具类方法 排序查找算法冒泡排序介绍原理注意代码 选择排序介绍原理规律代码 二分查找前提介绍原理注意代码 集合 Set集合 …

flink: 将接收到的tcp文本流写入HBase

一、依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

AcWing刷题-空调

空调 差分&#xff1a; N int(input()) p list(map(int, input().split())) t list(map(int, input().split())) d,s[0]*100010,[0]*100010 for i in range(N):d[i] p[i]-t[i]for i in range(N):s[i] d[i]s[i1] - d[i] ans 0 for i in range(N1):if s[i]>0:ans s[i]…