当前位置: 首页 > wzjs >正文

成品网站nike源码1688深圳中装建设集团有限公司

成品网站nike源码1688,深圳中装建设集团有限公司,玉器哪家网站做的好,做动漫网站的意义问题描述 给定一个非负数数组 arr[],每个元素表示从该位置最多可向前跳跃的步数。 示例: 若 arr[i] 3,则可以从位置 i 跳跃到 i1、i2 或 i3。若 arr[i] 0,则无法从该位置向前跳跃。 任务:找到从数组第一个位置移动…

问题描述

给定一个非负数数组 arr[],每个元素表示从该位置最多可向前跳跃的步数。
示例

  • 若 arr[i] = 3,则可以从位置 i 跳跃到 i+1i+2 或 i+3
  • 若 arr[i] = 0,则无法从该位置向前跳跃。

任务:找到从数组第一个位置移动到最后一个位置所需的最小跳跃次数。
注意:若无法到达终点,返回 -1

示例

输入arr[] = [1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9]
输出3
解释:
第一次从第 1 个元素(值 1)跳到第 2 个元素(值 3)。
第二次从第 2 个元素跳到第 5 个元素(值 9)。
第三次从第 5 个元素跳到终点。

输入arr = [1, 4, 3, 2, 6, 7]
输出2
解释:
第一次从第 1 个元素跳到第 2 个元素,第二次跳到终点。

输入arr = [0, 10, 20]
输出-1
解释: 无法从第一个位置跳跃。

方法 1:递归(时间复杂度 O(nⁿ),空间复杂度 O(n))

核心思想:递归遍历所有可能的跳跃路径,返回最小跳跃次数。

public class JumpGame {// 递归函数:计算从位置i到终点的最小跳跃次数 private static int minJumpsRecursive(int[] arr, int i) {// 终止条件:当前已到达或超过终点 if (i >= arr.length - 1) return 0;int minSteps = Integer.MAX_VALUE;// 遍历所有可能的跳跃步数(1到arr[i]步) for (int j = 1; j <= arr[i]; j++) {int nextPos = i + j;// 递归计算从下一步到终点的最小跳跃次数 int steps = minJumpsRecursive(arr, nextPos);if (steps != Integer.MAX_VALUE) {minSteps = Math.min(minSteps, 1 + steps); // 当前跳跃+后续步数 }}return minSteps;}public static int minJumps(int[] arr) {int result = minJumpsRecursive(arr, 0);return result == Integer.MAX_VALUE ? -1 : result;}public static void main(String[] args) {int[] arr = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9};System.out.println(minJumps(arr)); // 输出:3}
}
      1. 方法 2:动态规划(时间复杂度 O(n²),空间复杂度 O(n))

核心思想:自底向上填充 dp[i],表示从 i 到终点的最小跳跃次数。

public class JumpGameDP {public static int minJumps(int[] arr) {int n = arr.length;int[] dp = new int[n];Arrays.fill(dp, Integer.MAX_VALUE);dp[n - 1] = 0; // 终点到终点的跳跃次数为0  // 从倒数第二个元素向前推导  for (int i = n - 2; i >= 0; i--) {// 最多可跳跃到的最远位置  int maxJump = Math.min(i + arr[i], n - 1);for (int j = i + 1; j <= maxJump; j++) {if (dp[j] != Integer.MAX_VALUE) {dp[i] = Math.min(dp[i], 1 + dp[j]); // 选择最小的跳跃次数  }}}return dp[0] == Integer.MAX_VALUE ? -1 : dp[0];}public static void main(String[] args) {int[] arr = {1, 3, 5, 1, 3, 2, 6, 7, 6, 8, 9};        System.out.println(minJumps(arr)); // 输出:4int[] arr1 = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9};System.out.println(minJumps(arr1)); // 输出:3}
}

说明

  • 初始化dp[n-1] = 0(终点无需跳跃)。
  • 填表顺序:从后向前,每个位置依赖后续位置的结果。
  • 优势:无需递归栈,空间更优。

方法对比

方法

时间复杂度

空间复杂度

核心优化

暴力递归

O(nⁿ)

O(n)

动态规划(自底向上)

O(n²)

O(n)

迭代填表,无需递归栈


文章转载自:

http://wPeXlgWh.Lyrgp.cn
http://VgPWWtNr.Lyrgp.cn
http://Pc2wiQr2.Lyrgp.cn
http://5LntDBEC.Lyrgp.cn
http://5osLsDNF.Lyrgp.cn
http://3CxlB13O.Lyrgp.cn
http://07J5QWT2.Lyrgp.cn
http://qgPazJ9D.Lyrgp.cn
http://745y9LJh.Lyrgp.cn
http://j0FwT9kq.Lyrgp.cn
http://worxWc4f.Lyrgp.cn
http://6rSdWA78.Lyrgp.cn
http://WHrSgutH.Lyrgp.cn
http://An00IFIv.Lyrgp.cn
http://sYgXyxAL.Lyrgp.cn
http://DW2XgIJR.Lyrgp.cn
http://GY24KxoN.Lyrgp.cn
http://E0EQIGdk.Lyrgp.cn
http://rmqMducP.Lyrgp.cn
http://uQtafNw9.Lyrgp.cn
http://teQ4p81T.Lyrgp.cn
http://evI4dd1d.Lyrgp.cn
http://nVIv6z7v.Lyrgp.cn
http://7oammH5Q.Lyrgp.cn
http://7mz9ciFp.Lyrgp.cn
http://C6OZHOTg.Lyrgp.cn
http://KNtBeo1Y.Lyrgp.cn
http://6h6vbzst.Lyrgp.cn
http://Tv3MbxCY.Lyrgp.cn
http://CrNNCRSU.Lyrgp.cn
http://www.dtcms.com/wzjs/673727.html

相关文章:

  • 一站式织梦网站模板直播网站建设
  • 服装电子商务的网站建设如何发布自己的html网站
  • 什么样的网站是php网站网站怎么做seo排名
  • wordpress 文章发布 编辑器seo站群系统
  • dw做存资料网站怎么看网站是不是php语言做的
  • 深圳竞价网站wordpress 文件加载顺序
  • 银川商城网站建设如何做网站服务
  • 网站2级目录怎么做虚拟主机怎么用
  • 电商网站入口建设项目招标在什么网站公示
  • 企业网站必须备案吗wordpress 父级子页面
  • 深圳网站设计 制作网络营销方案规范
  • 西安做网站 怎样备案福州关键词排名推广
  • 黑龙江省城乡建设厅网站首页如何做自己的网站表白
  • 小程序开发定制开发哈尔滨网络优化公司有哪些
  • 广州微信网站建设报价表昆明网站建设建站模板
  • 汕尾住房和城乡建设局网站wordpress站群版
  • wordpress 旅游网站聊城制作手机网站
  • thinkphp旅游网站源码短期设计培训班
  • 衡水网站建设衡水网站建设wordpress获得链接地址
  • 制作一个购物网站要多少钱响应式布局怎么实现
  • 滁州网站建设费用新闻头条今天最新消息
  • 好的h5网站asp网站模板安装
  • 网站开发用了什么平台重庆网站seo建设
  • 做外贸网站方案专业网页制作手机页面
  • 购物网站app开发如何自己制作首页网站
  • 百度网站的优势全运会为什么建设网站
  • 网站后端做留言板功能wordpress怎么关注别人
  • 遵义网站建设中心html网站开发需要什么软件
  • 工程建设网站导航图单位建设网站用途
  • 推荐外贸网站建设的公司公众号网站开发用什么模板