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

面试经典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.mzph.cn/pingmian/892.shtml

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

相关文章

【Linux开发 第五篇】vi和vim

vi和vim Linux系统会内置Vi编辑器 Vim具有程序编辑的能力&#xff0c;可以看作是Vi的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计 三种模式 正常模式&#xff1a;vim打开一个文档就直接进入一般模式&#xff0c;可以进行复制&#x…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计&#xff0c;如下&#xff1a; select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…

缓存和数据库的区别,缓存之缓存之缓存的使用场景

在Java中&#xff0c;缓存和数据库是常见的数据存储和访问方式&#xff0c;它们之间有着明显的区别和各自适用的场景。 缓存与数据库的区别 存储位置&#xff1a; 缓存&#xff1a;通常存储在内存中&#xff0c;以提供快速的数据访问。数据库&#xff1a;通常存储在磁盘上&…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

java面向对象的封装Rectangle

&#xff08;1&#xff09;定义矩形类Rectangle&#xff0c; * - 声明实例变量长和宽&#xff0c;全部私有化private&#xff0c; * - 提供相应的get/set方法&#xff0c;如果set方法的参数值<0&#xff0c;则提示矩形的长和宽必须是正数 * - 声明public double area()&…

yarn的安装与配置

要安装和配置 Yarn&#xff0c;请按照以下步骤进行操作&#xff1a; 下载安装包&#xff1a;首先&#xff0c;你需要下载适用于你的操作系统的 Yarn 安装包。你可以在 Yarn 的官方网站&#xff08;https://yarnpkg.com&#xff09;上找到适用于不同操作系统的安装包。 安装 Ya…

鸿蒙系列--第一个程序HelloWorld

一、下载安装 下载DevEco Studio&#xff08;https://developer.huawei.com/consumer/cn/deveco-studio/&#xff09;并安装 二、创建第一个鸿蒙应用 Next Compile SDK&#xff1a;鸿蒙SDK版本 Mode&#xff1a;ArkTS的声明式开发范式与类Web 开发范式&#xff0c;官方主推S…

二维码如何调整样式?美化二维码生成器的用法

美化二维码功能是一个很常用的二维码编辑功能&#xff0c;一般用来修改二维码颜色、添加logo、更高码点、设置容错率等设置&#xff0c;可以通过简单的步骤将普通的黑白二维码调整成其他的样式。那么美化二维码生成器的使用方法是什么样的呢&#xff1f;下面就让小编来给大家讲…

背包问题 python

一、01背包问题&#xff08;经典&#xff09; 问题描述&#xff1a; 有N件物品和⼀个最多能被重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能⽤⼀次&#xff0c;求解将哪些物品装⼊背包⾥物品价值总和最⼤。 输入描述&#xff1a…

哈希和布隆过滤器

哈希 布隆过滤器 一致性哈希

Linux-进程间通信:System V消息队列

目录 System V IPC概述标识符与IPC Key System V消息队列创建或打开一个消息队列发送消息接收消息控制消息队列1、IPC_STAT2、IPC_SET3、IPC_RMID 查看系统当前的消息队列代码示例 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组用于在 Unix-like 操作…

数据分析(3)

数据分析&#xff08;3&#xff09; 索引和数据筛选 在我们导入数据将其存储在data变量中后&#xff0c;接下来就要开始对其进行操作了&#xff0c;要对指定的数据进行操作&#xff0c;首先要在一堆数据中确定它&#xff0c;因此需要索引 import pandas as pd data pd.read…

3D模型人物换装系统(五 模型核批之后模型uv不正确)模型UV不正确

3D模型人物换装系统&#xff08;五 模型核批之后模型uv不正确&#xff09;模型UV不正确 介绍展示Maya导入查看uvUnity中测试分析没合批为什么没有问题总结 介绍 最近在公司里给公司做模型优化合批的时候发现了模型的uv在合批之后无法正常展示&#xff0c;这里找了很多的原因&a…

算法 第44天 动态规划6

518 零钱对换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 …

牛客网:环形链表的约瑟夫问题

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f3dd;1.问题描述&#xff1a; 前言&#xff1a; 约瑟夫问题 有很多种解决办法&#xff0c;下面我们用链表进行解题 题目链…

【H4012】3.3V5V12V24V30V,3.5A大电流温度低 高效同步降压芯片IC DC-DC

您提到的“3.3V, 5V, 12V, 24V, 30V, 3.5A 高效同步降压芯片IC DC-DC”是指一种能够将较高电压&#xff08;例如24V或30V&#xff09;降至较低电压&#xff08;例如3.3V, 5V或12V&#xff09;的直流-直流&#xff08;DC-DC&#xff09;转换器。这种转换器通常使用同步降压技术&…

Springboot项目中,异步编程底层实现原理详解(二)

本系列文章简介&#xff1a; 在现代的开发中&#xff0c;异步编程已经成为了必备的技能。随着计算机性能的提升和多核处理器的普及&#xff0c;异步编程可以充分利用系统资源&#xff0c;提高程序的性能和响应速度。在Spring Boot项目中&#xff0c;异步编程也得到了广泛的应用…

短视频流媒体平台的系统设计

1. 功能需求: 我们的系统有两类参与者 内容创作者 •上传任何类型的视频&#xff08;格式编解码器&#xff09;•视频可以被删除•视频元数据•必填项: 标题&#xff0c;作者&#xff0c;描述•选填项: 分类/标签列表•可以随时更新•当视频对观众可用时&#xff0c;向内容创作…

力扣110. 平衡二叉树

思路&#xff1a;与二叉树最大高度类似&#xff0c;但是这里需要返回 -1 的高度来标识不是平衡二叉树&#xff0c;判断左右子树的高度相差大于1则不平衡&#xff0c;否则就是平衡。 class Solution {public boolean isBalanced(TreeNode root) {int ans func(root);if(ans >…

【人工智能基础】状态空间搜索

状态空间法 状态空间&#xff1a;一个问题全部可能的状态以及其关系的集合。 状态空间图&#xff1a;以图的形式表示问题的状态空间&#xff0c;节点对应状态&#xff0c;边对应状态转移算子&#xff0c;边上的权对应转移所需的代价 问题的解&#xff1a;是从最开始状态到目…