面试经典150题——跳跃游戏 II

news/2024/5/17 13:48:55

面试经典150题 day10

      • 题目来源
      • 我的题解
        • 方法一 动态规划
        • 方法二 贪心

题目来源

力扣每日一题;题序:45

我的题解

方法一 动态规划

动态规划,当j位置可达i位置时:dp[i]=Math.min(dp[i],dp[j]+1);

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(n)

public int jump(int[] nums) {int n=nums.length;int[] dp=new int[n];Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;for(int i=1;i<n;i++){int c=nums[i];for(int j=0;j<i;j++){if(j+nums[j]>=i)dp[i]=Math.min(dp[i],dp[j]+1);}}return dp[n-1];
}
方法二 贪心

「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。
例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的位置中,下标 1 的值是 3,从下标 1 出发可以达到更远的位置,因此第一步到达下标 1。
从下标 1 出发,最远可到达下标 4。下标 1 可到达的位置中,下标 4 的值是 4 ,从下标 4 出发可以达到更远的位置,因此第二步到达下标 4。
在具体的实现中,维护当前能够到达的最大下标位置,记为边界。从左到右遍历数组,到达边界时,更新边界并将跳跃次数增加 1。
在遍历数组时,不访问最后一个元素,这是因为在访问最后一个元素之前,的边界一定大于等于最后一个位置,否则就无法跳到最后一个位置了。如果访问最后一个元素,在边界正好为最后一个位置的情况下,会增加一次「不必要的跳跃次数」,因此不必访问最后一个元素。
具体操作:参考Ikaruga的题解

  1. 如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。
    1.1 以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。

  2. 如果从这个 起跳点 起跳叫做第 1 次 跳跃,那么从后面 3 个格子起跳 都 可以叫做第 2 次 跳跃。

  3. 所以,当一次 跳跃 结束时,从下一个格子开始,到现在 能跳到最远的距离,都 是下一次 跳跃 的 起跳点。
    3.1 对每一次 跳跃 用 for 循环来模拟。
    3.2 跳完一次之后,更新下一次 起跳点 的范围。
      在新的范围内跳,更新 能跳到最远的距离。
      记录 跳跃 次数,如果跳到了终点,就得到了结果。
    图解:
    图解
    时间复杂度:O(n)
    空间复杂度:O(1)

public int jump(int[] nums) {int n=nums.length;int maxIndex=0,end=0;//maxIndex当前可到达最大位置   end上一跳的右边界int res=0;for(int i=0;i<n-1;i++){maxIndex=Math.max(maxIndex,nums[i]+i);if(i==end){end=maxIndex;res++;}}return res;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~


http://www.mrgr.cn/p/45465354

相关文章

使用 Docker 部署 Draw.io 在线流程图系统

1)介绍 Draw.io GitHub:https://github.com/jgraph/drawioDraw.io 是一款开源的绘制流程图的工具,拥有大量免费素材和模板。程序本身支持中文在内的多国语言,创建的文档可以导出到多种网盘或本地。无论是创建流程图、组织结构图、网络拓扑图还是其他类型的图表,Draw.io 基…

ThinkPHP使用Redis

前置环境 安装Redis 新建一个ThinkPHP6项目 ThinkPHP使用Redis 安装 Redis 扩展 # 在项目目录下执行如下代码,安装redis依赖 composer require topthink/think-redisconfig/database.php redis => [// 默认数据连接标识default => [host => env(redis.hostnam…

【人工智能书籍PDF】TensorFlow机器学习实战指南(书籍分享)

今天又来给大家推荐一本人工智能方面的书籍<TensorFlow机器学习实战指南>。TensorFlow是一个开源机器学习库。本书从TensorFlow的基础开始介绍&#xff0c;涉及变量、矩阵和各种数据源。之后&#xff0c;针对使用TensorFlow线性回归技术的实践经验进行详细讲解。后续章节…

鸿蒙开发TypeScript语言:【Number】

TypeScript 与 JavaScript 类似,支持 Number 对象。 Number 对象是原始数值的包装对象。 语法 var num = new Number(value);注意: 如果一个参数值不能转换为一个数字将返回 NaN (非数字值)。 Number 对象属性 下表列出了 Number 对象支持的属性:序号 属性 & 描述1. MA…

小程序地理位置权限申请+uniapp调用uni.getLocation

文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 登录 微信公众平台 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到&#x…

vue3 -- 项目使用自定义字体font-family

在Vue 3项目中使用自定义字体(font-family)的方法与在普通的HTML/CSS项目中类似。可以按照以下步骤进行操作: 引入字体文件: 首先,确保你的字体文件(通常是.woff、.woff2、.ttf等格式)位于项目中的某个目录下,比如src/assets/font/。 在全局样式中定义字体: 在你的全局…

Python 将PDF转为PDF/A和PDF/X,以及PDF/A转回PDF

PDF/A和PDF/X是两种有特定用途的PDF格式&#xff0c;具体查看以下&#xff1a; PDF/A是一种用于长期存档的PDF格式&#xff0c;它旨在确保文档的内容和格式在未来的访问中保持不变。如果您需要对文件进行长期存档&#xff0c;比如法律文件或档案记录&#xff0c;将其转换为PDF…

L2正则化

L2正则化是一种用于机器学习和统计建模中的技术&#xff0c;旨在控制模型的复杂度&#xff0c;并防止过拟合。它通过在模型的损失函数中添加一个惩罚项来实现这一目的。这个惩罚项是模型权重的平方和&#xff0c;乘以一个正则化参数 λ。这样可以迫使模型权重趋向于较小的值&am…

XDEFIANT不羁联盟怎么申请测试 不羁联盟参与测试教程

《不羁联盟》有五个独具特色的阵营可供选择&#xff1a;自由武装、暗影小队、梯队、净化者、DedSec&#xff0c;全部出自育碧知名的角色与世界。无论是拥有“声纳护目镜”超能的梯队探员&#xff0c;还是拥有黑入对手设备能力的 DedSec&#xff0c;每个阵营都有自己的一套独特技…

hook初识之inline hook

文章首发阿里云先知社区:https://xz.aliyun.com/t/14033 什么是 hook hook 翻译过来就是钩子,它用于拦截并改变某个事件或操作的行为,比如我们大家在写 shellcode loader 时,直接使用申请内存,copy 内存等高危操作可能会报毒,然后尝试更换冷门的 api 或者直接使用内核函数…

鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)

🚀前言 动画是一种通过连续展示一系列静止的图像(称为帧)来创造出运动效果的艺术形式。它可以以手绘、计算机生成或其他各种形式呈现。在动画中,每一帧都具有微小的变化,当这些帧被快速播放时,人眼会产生视觉上的错觉,认为物体在运动。动画可以用来表达故事、观念、想法…

矩阵求导(二)

前面已经介绍了标量对向量和矩阵的求导以及向量和矩阵对标量的求导,现在介绍一下向量和向量之间的求导规则。向量对向量求导不管被求导的向量是行向量还是列向量,我们求导的步骤都是统一的,只要选择了分母布局,其求导结果都是一个与分母同行数的矩阵,而列数则等于分子向量…

Linux架构31 ansible roles角色, ansible galaxy

Ansible Roles角色 1.Ansible Roles基本概述 Roles基于一个已知的文件结构,去自动地加载某些 var_files, tasks 以及 handlers。 Ansible注意事项: 在编写roles的时候,最好能将一个task拆分为一个文件,方便后续复用。(彻底的打散)2.Ansible Roles目录结构 roles官方目录结构…

Mac安装Redis

Mac安装Redis # 安装Homebrew命令,Homebrew安装的软件会默认在/usr/local/Cellar/路径下 # /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" # Homebrew命令安装redis brew install redis启动Redis #方式一:使用brew帮助我…

如何使用 abp 创建 module 并应用单独的数据库迁移

创建 abp 项目 官方文档已经提供了非常详细的新建项目向导。参考:https://docs.abp.io/en/abp/latest/Getting-Started-Create-Solution?UI=Blazor&DB=EF&Tiered=Yes CLI 命令参考:https://docs.abp.io/en/abp/latest/CLI 我们使用 abp CLI 创建一个新项目。我使用 …

今天给大家推荐36套404页面模板

404页面是网站必备的一个页面&#xff0c;它承载着用户体验与SEO优化的重任。当用户访问不存在的页面时&#xff0c;服务器会返回404错误代码&#xff0c;并显示404页面。一个好的404页面可以帮助用户快速找到所需信息&#xff0c;并提升网站的用户体验。 以下是一些演示下载资…

OpenCV从入门到精通实战(六)——多目标追踪

基于原生的追踪 使用OpenCV库实现基于视频的对象追踪。通过以下步骤和Python代码&#xff0c;您将能够选择不同的追踪器&#xff0c;并对视频中的对象进行实时追踪。 步骤 1: 导入必要的库 首先&#xff0c;我们需要导入一些必要的Python库&#xff0c;包括argparse、time、…

redis常见的应用问题以及解决方案

redis中三种缓存问题以及解决方案缓存穿透 问题描述: key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源。 用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能…

产废端实时音视频监控系统在运输车辆驾驶室中的应用

实时音视频监控系统可通过在运输车辆驾驶室安装音视频摄录设备&#xff0c;实现将运输车辆内部及周围环境音视频数据通过移动网络实时回传指挥中心的功能。 前端摄录设备主要负责采集车内外的视音频信息&#xff0c;为了保障车辆及运输人员 的安全&#xff0c;应合理选择摄录设…