跳跃游戏 II (贪心, 动态规划)

embedded/2024/10/25 16:21:49/
  • 题目描述(力扣45题) :

    • 给定一个长度为 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]

  

  • 解题思路:

    • 以[2, 3, 1, 1, 4] 为例
    • 首先从 0 索引位置出发,  可以跳到 1, 2 索引
    •  
    •  1 索引的 3 刚好可以到达最后一个位置的4, 二 2 索引的1 只能到达 3 索引的 1, 所以选择从 1 索引的 3 跳跃, 一共跳两次, 返回 2
  • 简单来说, 就是在本次的跳跃范围以内, 找出下次跳跃距离最远的那一个索引(位置).

  • 解题步骤: 

  • int length = nums.length; 获取数组的长度,用于控制循环范围。

  • int end = 0; 这个变量记录了当前跳跃的范围的最远位置。

  • int maxPosition = 0; 这个变量记录了当前跳跃范围内能够到达的最远位置。

  • int steps = 0; 这个变量记录了跳跃的步数。

  • for (int i = 0; i < length - 1; i++) {这是一个循环,从数组的第一个位置开始,遍历到倒数第二个位置。因为在循环中会访问 nums[i+1],所以循环的终止条件是 i < length - 1

  • maxPosition = Math.max(maxPosition, i + nums[i]);更新当前跳跃范围内能够到达的最远位置。i + nums[i] 表示从当前位置能够跳跃到的最远位置,通过 Math.max 来更新 maxPosition

  • if (i == end) {如果当前位置 i 达到了之前记录的跳跃范围的最远位置 end,说明需要进行下一次跳跃了。

  • 以下是代码实现: 

    • class Solution {public int jump(int[] nums) {int end = 0;int maxLocal = 0;int step = 0;for(int i = 0; i <= end && end < nums.length - 1; i++) {maxLocal = Math.max(maxLocal, i + nums[i]);if(i == end) {end = maxLocal;step++;}}return step;}
      }

       

    •                                     以上是本篇文章的全部内容, 感谢观看


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

相关文章

如何基于香橙派AIpro对视频/图像数据进行预处理

背景介绍 受网络结构和训练方式等因素的影响&#xff0c;绝大多数神经网络模型对输入数据都有格式上的限制。在计算机视觉领域&#xff0c;这个限制大多体现在图像的尺寸、色域、归一化参数等。如果源图或视频的尺寸、格式等与网络模型的要求不一致时&#xff0c;我们需要对其…

量子城域网系列(七):移动终端量子加密赋能

之前的文章中我们讨论了量子密钥如何在网络协议中加密应用&#xff0c;但是在端侧&#xff0c;有大量的无线场景&#xff0c;比如手机、物联网设备等等&#xff0c;这些场景的保密需要也非常旺盛。此外&#xff0c;基于量子密钥分发的城域网络要实现信息传输安全闭环&#xff0…

临滴RK3588桌面版系统,命令行修改静态固定IP

修改文件位置&#xff1a; 打开并修改文件&#xff1a;vi Wired\ connection\ 2.nmconnection 修改IP: 修改相关信息后保存重启即可

常见的css面试题(持续更新,欢迎补充)

总结面试常问的css相关面试题~ 1. 什么情况下设置margin会造成margin塌陷? 怎么解决&#xff1f; 通常遇见margin塌陷&#xff0c;是我们同时给父子元素都设置的margin&#xff0c; 此时元素不会像我们想的那样撑开&#xff0c;而是选取最大margin去显示。 如何解决这个问题…

XUbuntu18.04 源码编译Qt4.5.3的过程

由于新公司很多旧的软件都是基于这个版本做的嵌入式开发。 所以想要自己搭一套基于Linux的非嵌入式开发环境&#xff0c;方便用来调试和编译代码。 这样就可以完成在linux下开发&#xff0c;然后直接嵌入式打包&#xff0c;涉及到界面的部分就不需要上机调试看问题了。 所以…

vue项目全局挂载函数 — webpack.ProvidePlugin

ProvidePlugin&#xff1a;&#xff08;官方文档解释&#xff09; 自动加载模块&#xff0c;而不必在任何地方 import 或 require 它们。 理解&#xff1a;在项目中&#xff0c;存在业务逻辑相同的功能&#xff0c;为了减少代码的书写&#xff0c;我们一般会选择抽离出复用的代…

Spring源码中的简单工厂模式

Spring 源码中广泛运用了各种设计模式,其中包括简单工厂模式。简单工厂模式在 Spring 中主要用于简化对象的创建过程,将对象的创建逻辑集中管理,从而使得客户端代码无需关心具体的对象创建细节,只需与工厂交互就能获取所需的对象实例。这种设计有助于提高代码的可读性、可维…

记录如何用php做一个网站访问计数器的方法

简介 创建一个简单的网站访问计数器涉及到几个步骤&#xff0c;包括创建一个用于存储访问次数的文件或数据库表&#xff0c;以及编写PHP脚本来增加计数和显示当前的访问次数。 方法 以下是使用文件存储访问次数的基本步骤&#xff1a; 创建一个文本文件来存储计数&#xff1a…