Leetcode 跳跃游戏 二

在这里插入图片描述
核心任务是找出从数组的起点跳到终点所需的最小跳跃次数

这段代码解决的是“跳跃游戏 II”(Leetcode第45题),其核心任务是找出从数组的起点跳到终点所需的最小跳跃次数。

class Solution {public int jump(int[] nums) {//首先处理特殊情况if(nums.length <= 1) return 0;int maxReach = 0; //从起点开始所能达到的最远位置,它是随着遍历数组不断更新的int currentEnd = 0; //最近一次跳跃后,当前能够到达的最远末端位置。int jumpCount = 0; //跳跃次数for(int i = 0; i < nums.length; i++) {maxReach = Math.max(maxReach, i + nums[i]);if(i == currentEnd) {jumpCount++;currentEnd = maxReach;}if(currentEnd >= nums.length - 1) {break;//跳出循环,不需要再统计跳跃次数了,因为可以到达末尾元素。}}return jumpCount;}
}

算法思想

这个算法的核心是 贪心算法(Greedy Algorithm)。其思想是:每次选择当前能够跳跃的范围内最远的点来进行跳跃,从而保证用最少的跳跃次数到达数组的末尾。

代码讲解

  1. 特殊情况处理

    if (nums.length <= 1) {return 0; // 如果数组长度为1或更短,不需要跳跃,直接返回0。
    }
    

    这里是为了处理数组长度为1的情况,如果起点就是终点,自然不需要任何跳跃。

  2. 定义变量

    int jumps = 0; // 记录跳跃的次数
    int currentEnd = 0; // 当前这一次跳跃能够到达的最远位置
    int farthest = 0; // 从当前跳跃范围内能够到达的最远位置
    
    • jumps:记录跳跃的次数。
    • currentEnd:当前跳跃范围的终点,即在这一跳内能够到达的最远位置。
    • farthest:遍历当前范围内的点时,记录从这些点能够跳跃到的最远位置。
  3. 遍历数组

    for (int i = 0; i < nums.length - 1; i++) {farthest = Math.max(farthest, i + nums[i]); // 更新最远位置
    
    • 对于数组中的每一个位置 i,计算从该位置能够跳跃到的最远位置,即 i + nums[i]farthest 保存了当前范围内可以跳到的最远位置。
  4. 判断是否需要增加跳跃次数

    if (i == currentEnd) {jumps++; // 增加跳跃次数currentEnd = farthest; // 更新当前跳跃范围的终点
    }
    
    • 如果当前的索引 i 达到了 currentEnd,意味着当前这次跳跃的范围已经遍历完了,因此需要增加一次跳跃,并且将 currentEnd 更新为 farthest,即下一次跳跃可以到达的最远位置。
  5. 提前结束判断

    if (currentEnd >= nums.length - 1) {break; // 如果当前跳跃范围已经能够覆盖到数组的末尾,直接结束循环
    }
    
    • 如果 currentEnd 已经能够到达或超过数组的最后一个元素,则不需要继续遍历,跳出循环。

复杂度分析

  • 时间复杂度:O(n),因为我们只遍历数组一次,每个元素都会处理一次。
  • 空间复杂度:O(1),算法只用了常数空间来存储跳跃次数、当前范围的终点和最远位置。

总结

该算法每次选择能跳到的最远位置来进行跳跃,确保以最少的跳跃次数到达终点。通过遍历数组,在每一跳的过程中更新能够跳到的最远点,并在到达当前跳跃的边界时增加跳跃次数,直到覆盖整个数组。

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

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

相关文章

洛谷P3478 [POI2008] STA-Station(换根dp)

题目链接 https://www.luogu.com.cn/problem/P3478 思路 对于 n 1 e 6 n1e6 n1e6&#xff0c;我们考虑换根dp。 定义 f [ u ] f[u] f[u]表示以 u u u为根的子树中&#xff0c;所有节点的深度之和。定义 d p [ u ] dp[u] dp[u]表示整棵树以 u u u为根时&#xff0c;所有节点…

制药企业MES与TMS的数据库改造如何兼顾安全与效率双提升

*本图由AI生成 在全球制造业加速数字化转型的浪潮中&#xff0c;一家来自中国的、年营业额超过200亿元的制药企业以其前瞻性的视角和果断的行动&#xff0c;成为该行业里进行国产化改造的先锋。通过实施数据库改造试点项目&#xff0c;该企业实现了其关键业务系统MES&#xff0…

python的多线程和多进程

首先需要明确的是&#xff0c;多进程和其他语言的一样&#xff0c;能够利用多核cpu&#xff0c;但是python由于GIL的存在&#xff0c;多线程在执行的时候&#xff0c;实际上&#xff0c;每一时刻只有一个线程在执行。相当于是单线程。然而多线程在某些情况下&#xff0c;还是能…

使用 python 下载 bilibili 视频

本文想要达成的目标为&#xff1a;运行 python 代码之后&#xff0c;在终端输入视频链接&#xff0c;可自动下载高清 1080P 视频并保存到相应文件夹。 具体可分为两大步&#xff1a;首先&#xff0c;使用浏览器开发者工具 F12 获取请求链接相关信息&#xff08;根据 api 接口下…

Leetcode 1514. 概率最大的路径

1.题目基本信息 1.1.题目描述 给你一个由 n 个节点&#xff08;下标从 0 开始&#xff09;组成的无向加权图&#xff0c;该图由一个描述边的列表组成&#xff0c;其中 edges[i] [a, b] 表示连接节点 a 和 b 的一条无向边&#xff0c;且该边遍历成功的概率为 succProb[i] 。 …

【3dgs】Gaussian-SLAM发展关键历程梳理

【3dgs】Gaussian-SLAM 0. 写在前面1. 3D Splatting与SLAM流程2. Splatting SLAM&#xff1a;单目/RGB-D(2024年新作&#xff09;2.1 相机跟踪精度2.2 新视图渲染性能2.3 消融实验 3. Gaussian-SLAM&#xff08;Photo-SLAM&#xff09; Photo-SLAM技术原理详解 ORBSLAM3dGS&am…

OKG Research:如何衡量链上数据的开放价值?

在新加坡Token2049期间&#xff0c;欧科云链研究院受邀参加Bloomberg主办的企业另类资产投资峰会2024&#xff0c;与多位专家围绕未来数据形态与前景进行了深入交流。 活动后&#xff0c;欧科云链研究院负责人Lola Wang与资深研究员Jason Jiang在大公网发表署名文章《如何衡量…

faust,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - faust。 Github地址&#xff1a;https://github.com/robinhood/faust 在分布式系统和实时数据处理的世界里&#xff0c;消息流处理&#xff08;Stream Processing&#xff09;变得越来越重要。Faust 是一个 Python 库…

【工具变量】上市公司企业广告支出数据(2007-2023年)

一、测算方式&#xff1a;具体而言&#xff0c;参照 Lu 等&#xff08;2022&#xff09;的研究&#xff0c;本文通过上市公司财务报表附注获取每家上市公司每年销售费用明细项目&#xff0c;筛选出广告费、广告宣传费、广告推广费、广告策划费、广告展览费等与广告支出相关的项…

Python入门笔记(二)

文章目录 第六章 列表list6.1 创建列表&#xff1a;[]、list()、列表生成式6.2 索引访问元素、元素返回索引index()6.3 列表增加元素:append()、extend()、insert()6.4 列表删除元素&#xff1a;remove()、del()、pop()、clear()6.5 列表修改元素6.6 排序&#xff1a;.sort()、…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

自定义函数查看OS的file cache

简介 在OS中使用cache机制&#xff0c;主要为了提高磁盘的读取效率&#xff0c;避免高频的IO交换。将频繁访问的数据存放在file cache中&#xff0c;下一次在获取的时候就可以直接读取&#xff0c;缓存高命中率对于数据高速检索十分有利。 smem smem 是一个可以显示 Linux 系…

【即见未来,为何不拜】聊聊分布式系统中的故障监测机制——Phi Accrual failure detector

前言 昨天在看tcp拥塞控制中的BBR(Bottleneck Bandwidth and Round-trip propagation time)算法时&#xff0c;发现了这一特点&#xff1a; 在BBR以前的拥塞控制算法中(如Reno、Cubic、Vegas)&#xff0c;都依赖于丢包事件的发生&#xff0c;在高并发时则会看到网络波动的现象…

uni-app使用v-show编译成微信小程序的问题

问题 在uni-app使用v-show语法编译成微信小程序会有一个问题 当我们设置成v-show"false" 在Hbuilder X里面确实没有显示 然后运行到 微信开发程序里面 发现显示了出来&#xff0c;说明设置的 v-show"false"没有起作用 解决办法 首先去uniapp官网查看v…

uniapp打包安卓apk步骤

然后安装在手机上就可以啦

火狐浏览器 Firefox v131.0.2 第三方tete009编译便携版

火狐浏览器是一款非常优秀的浏览器&#xff0c;它的兼容性和稳定性非常出色&#xff0c;备受全球用户的青睐。Firefox便携版是Firefox浏览器的一个特别版本&#xff0c;它可以在没有安装的情况下使用&#xff0c;非常方便。tete009 Firefox 编译版的启动和加载图片时间是所有火…

Ubuntu内存扩容

目录 vmware设置Ubuntu设置查看 读研后发现&#xff0c;Ubuntu的使用量直线上升&#xff0c;之前给配置了20g内存&#xff0c;安装了个ros后&#xff0c;没啥内存了。本文实现给Ubuntu扩容。 vmware设置 这里 我使用别人的截图来演示。 我在这里改成了60 Ubuntu设置 sudo a…

JS 分支语句

目录 1. 表达式与语句 1.1 表达式 1.2 语句 1.3 区别 2. 程序三大流控制语句 3. 分支语句 3.1 if 分支语句 3.2 双分支 if 语句 3.3 双分支语句案例 3.3.1 案例一 3.3.2 案例二 3.4 多分支语句 1. 表达式与语句 1.1 表达式 1.2 语句 1.3 区别 2. 程序三大流控制语…

每天花2分钟学数字化转型,第三讲:数智化

​对于智能化&#xff08;intelligence&#xff09;&#xff0c;我的理解是&#xff1a;你中有我&#xff0c;我中有你「人机一体」的世界。 阅读本文&#xff0c;你将快速知晓“智能化”的定义与价值&#xff0c;通过生活实例让你对智能化有一个全新的理解。 最后还会介绍“…

Keil中代码补全功能和自动缩进功能设置

一、自动缩进功能的设置&#xff0c;在按回车键换行或者按Tab键的时候是有缩进的&#xff0c;还可以进行缩进设置。可以通过以下步骤进行设置&#xff1a;①Edit&#xff08;编辑&#xff09;->②Configuration(配置)->③Tab size&#xff08;Tab缩进长度&#xff09;在T…