跳跃游戏-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.mzph.cn/news/780730.shtml

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

相关文章

AIGC新潮流!手势灵动数字人视频、百变模特服装图、3D模型纹理一键生成

1、营销应用:AI生成生成带手势(手部动作)的数字人视频 (1)一个基于扩散模型的数字人生成框架,专注于生成具有全身动作的主播风格视频。该系统通过仅需一分钟的个人视频片段进行训练,便能自动生成具有精确躯干和手部动作的主播风格视频。 (2)定位:该框架定位于解决现…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

自动驾驶-如何进行多传感器的融合

自动驾驶-如何进行多传感器的融合 附赠自动驾驶学习资料和量产经验&#xff1a;链接 引言 自动驾驶中主要使用的感知传感器是摄像头和激光雷达&#xff0c;这两种模态的数据都可以进行目标检测和语义分割并用于自动驾驶中&#xff0c;但是如果只使用单一的传感器进行上述工作…

数据处理库Pandas数据结构DataFrame

Dataframe是一种二维数据结构&#xff0c;数据以表格形式&#xff08;与Excel类似&#xff09;存储&#xff0c;有对应的行和列&#xff0c;如图3-3所示。它的每列可以是不同的值类型&#xff08;不像 ndarray 只能有一个 dtype&#xff09;。基本上可以把 DataFrame 看成是共享…

【机器学习之---数学】熵和交叉熵

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 熵和交叉熵 1. 熵 概率分布的熵可以被解释为与给定分布中的随机变量相关的不确定性或缺乏可预测性的度量。 我们还可以使用熵来定义数据源的信息内容。…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分&#xff0c;小程序在日常生活中发挥着越来越重要的作用。因此&#xff0c;了解和严格遵守小程序的 UI 设计标准非常重要&#xff0c;它不仅可以帮助我们在保证良好用户体验的同时优化小程序&#xff0c;还可以使我们的产品在竞争激烈的市场中占据…

零基础入门转录组数据分析——绘制差异火山图

零基础入门转录组数据分析——绘制差异火山图 差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。 本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解…

数字范围按位与

题目链接 数字范围按位与 题目描述 注意点 0 < left < right < 2^31 - 1包含 left 、right 端点 解答思路 返回区间内所有数字按位与的结果&#xff0c;所以区间内所有数字在某一位的值相同&#xff0c;则结果该位数字为该值&#xff0c;否则该位数字为0&#xf…

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…

火狐浏览器垂直标签页对比 Sidebery vs Tab Center Reborn

Sidebery 链接 商店 评价 大而全&#xff0c;各种功能&#xff0c;以及相关的配置项&#xff0c;应有尽有&#xff1b;功能包括但不限于&#xff1a; 树形标签页、着色、面板、容器、快照最近关闭、标签页、历史 默认的配置就已经很好用了&#xff1b; 快捷键&#xff1a;F…

2024年安全员-C证证模拟考试题库及安全员-C证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-C证证模拟考试题库及安全员-C证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;安全员-C证证模拟考试题库是根据安全员-C证最新版教材&#xff0c;安全员-C证大纲整理而成&#xff08;含2024年…

TSINGSEE青犀多模型、算力调度与智能分析AI算法中台介绍及应用

TSINGSEE青犀AI算法中台是一款平台型产品&#xff0c;专注于提供各行业中小场景中部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点&#xff0c;可提供丰富的视图接入能力和智能分析能力。平台将不同类型、不同协议前端设备&#xff0c;支持通过不同网络环…

css简单动画实现

html源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>西安工程大学</title><link …

N9010A安捷伦N9010A信号分析仪

181/2461/8938产品概述&#xff1a; Keysight N9010A EXA 信号分析仪是最大限度提高生产线吞吐量的最快方法。从测量速度到代码兼容性&#xff0c;它让每一毫秒都很重要&#xff0c;并帮助您降低总体测试成本。 我们无法预测未来&#xff0c;但安捷伦可以利用我们面向未来的测…

深入探讨Docker in Docker:原理与实战指南

在软件开发和部署中&#xff0c;容器化技术已经成为一个不可或缺的工具。而在使用Docker进行容器化时&#xff0c;有时可能会遇到需要在一个Docker容器中运行另一个Docker容器的情况&#xff0c;这就是所谓的"Docker in Docker"&#xff08;简称DinD&#xff09;。本…

分治法课堂案例(1-8未完,只有1-5,待续)

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2024.03.30 Last edited: 2024.03.30 目录 分治法课堂案例 第1关&#xff1a;二分搜索技术 任务描述 编程要求 测试说明 代码如下&#xf…

【大数据】Flink学习笔记

文章目录 认识FlinkDocker安装Flink基本概念Flink的特点Flink 和 Spark Streaming 对比 基本使用WordCount实现依赖 批模式代码流模式代码网络流模式代码在web UI上提交代码创建项目[^1]编写代码配置打包在Web UI上提交 Flink 架构系统架构核心概念并行度算子链(Opeartor Chain…

一次性了解C语言中文件和文件操作

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 文件及文件操作 前言1. 文件分类1.1 文本文件1.2 二进制文件1.3 文本文件和二进制文件的区别 2…

基于哈希槽的docker三主三从redis集群配置

目录 一、三主三从redis集群配置 1、关闭防火墙启动docker后台服务 2、新建6个docker容器redis实例 3、进入容器redis-node-1为6台机器构建集群关系 3.1进入容器 3.2构建主从关系 4、查看集群状态 4.1链接进入6381作为切入点 二、主从容错切换迁移按例 1、数据读写存储…