LeetCode hot100-79

embedded/2024/12/19 14:29:26/

https://leetcode.cn/problems/jump-game-ii/?envType=study-plan-v2&envId=top-100-liked

45. 跳跃游戏 II
已解答
中等
相关标签
相关企业
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j]:0 <= j <= nums[i] 
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

这题看着官方解法一大坨分析,直接用gpt帮忙写的。能打败99%通过。不过贪心的就是看着简单实际自己写起来似懂非懂。

这道题目属于 贪心算法 类型。其核心思想是:

每次尽量跳得最远,以减少跳跃次数。
从当前位置开始,选择下一个跳跃的目标是能跳到的最远位置。
通过维护 end 来表示当前跳跃的最远位置,并通过 farthest 来表示我们能到达的最远位置。
每当 end 到达当前跳跃范围的最远位置时,我们增加跳跃次数,并更新跳跃范围的最远位置。

这一部分核心代码的含义是

if (i == end) {jumps++;           // 跳跃次数 +1end = farthest;    // 更新当前跳跃范围的最远位置
}

我们希望通过最少的跳跃次数从 nums[0] 到达 nums[n-1]。
farthest 记录了当前跳跃能够到达的最远位置。
end 记录了当前跳跃范围的最远位置,即到达此位置后,我们必须增加跳跃次数。
核心逻辑:
farthest:每次我们遍历 nums[i] 时,farthest 会更新为当前可以跳到的最远位置,即 farthest = Math.max(farthest, i + nums[i])。这意味着从当前的 i 位置,我们最多能跳到 i + nums[i] 这个位置。

例如,假设我们处在索引 2,nums[2] = 3,那么我们可以跳到索引 2 + 3 = 5,也就是我们最远能跳到的位置是 5。

end:end 记录了当前跳跃所能到达的最远位置。假设在某次跳跃中,我们通过 farthest 计算得到了一个新的最远位置。如果 i == end,表示我们已经到达了当前跳跃范围的边界,也就是说,我们跳跃到这个位置时,已经不能再继续前进,而是需要再进行一次跳跃。

class Solution {public int jump(int[] nums) {int n = nums.length;// 如果数组长度小于等于1,则无需跳跃if (n <= 1) {return 0;}int jumps = 0;         // 记录跳跃次数int farthest = 0;      // 记录当前能跳到的最远位置int end = 0;           // 记录当前跳跃的最远位置for (int i = 0; i < n; i++) {// 更新最远位置farthest = Math.max(farthest, i + nums[i]);// 如果到达当前跳跃范围的最远位置,增加跳跃次数,并更新 end 为 farthestif (i == end) {jumps++;end = farthest;// 如果到达最后一个位置,直接返回跳跃次数if (end >= n - 1) {break;}}}return jumps;}
}

http://www.ppmy.cn/embedded/147039.html

相关文章

Maven 中的引用与继承:构建项目的得力助手

《Maven 中的引用与继承&#xff1a;构建项目的得力助手》 在 Maven 的奇妙世界里&#xff0c;引用和继承就像是两位神通广大的魔法师&#xff0c;各自施展着独特的魔法&#xff0c;助力我们构建出强大而有序的项目。今天&#xff0c;就让我们一同深入探究这两位魔法师的奥秘吧…

物理信息神经网络(PINN)八课时教案

物理信息神经网络&#xff08;PINN&#xff09;八课时教案 第一课&#xff1a;物理信息神经网络概述 1.1 PINN的定义与背景 物理信息神经网络&#xff08;Physics-Informed Neural Networks&#xff0c;简称PINN&#xff09;是一种将物理定律融入神经网络训练过程中的先进方…

利用SpringAOP的返回通知处理数据加密返回

项目安全要求把所有返回值做加密处理&#xff0c;利用SpringAOP的返回切面可以简单方便的做到该需求。 Aspect public class ResponseDataEncryptAspect {private ObjectMapper objectMapper;public ResponseDataEncryptAspect () {this.objectMapper new ObjectMapper();// …

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

Redis List操作

Redis List操作 1、lPush 在名称为key的list左边&#xff08;头&#xff09;添加一个值为value的 元素 $redis->lPush(key, value);2、rPush 在名称为key的list右边&#xff08;尾&#xff09;添加一个值为value的 元素 $redis->rPush(key, value);3、lPushx/rPushx 在名…

bean创建源码

去字节面试&#xff0c;直接让人出门左拐&#xff1a;Bean 生命周期都不知道&#xff01; spring启动创建bean流程 下面就接上了 bean生命周期 doGetBean Object sharedInstance this.getSingleton(beanName); sharedInstance this.getSingleton(beanName, new ObjectF…

从零用java实现 小红书 springboot vue uniapp (5)购物页聊天页

前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了个人中心页开发 今天我们具体的去进行实现购物页 聊天页 并且分享我开发时遇到的问题 首先先看效果 商品页 商品数据先用笔记数据 我们对布局整体规划一下 搜索组件 搜索组件是fiexd布局一直在页面…

【每日一题 基础题】[蓝桥杯 2020 省 AB3] 乘法表

[蓝桥杯 2020 省 AB3] 乘法表 乘法表 九九乘法表是学习乘法时必须要掌握的。在不同进制数下&#xff0c;需要不同的乘法表。 例如, 四进制下的乘法表如下所示&#xff1a; 1 * 11 2 * 12 2 * 210 3 * 13 3 * 212 3 * 321 请注意&#xff0c;乘法表中两个数相乘的顺序必须为样例…