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

【动态规划】45. 跳跃游戏 II

45. 跳跃游戏 II

解题思路

  • int[] memo;:定义一个数组memo,用来作为备忘录,存储从每个索引位置跳到数组末尾所需的最小跳跃次数。

  • Arrays.fill(memo, n);:在开始计算之前,先将memo数组的所有元素初始化为n。这里的n是输入数组nums的长度,初始化为n是因为从任何位置到最后位置的跳跃次数不可能大于n-1。

  • dp(nums, 0);:调用dp函数,从索引0开始计算到达最后位置的最少跳跃次数。

  • dp函数:这个函数是解题的核心,它递归地计算从当前位置p到最后位置所需的最少跳跃次数。

  • 如果p已经大于或等于n-1(即已经到达或超过了数组的最后位置),则不需要再跳跃,返回0。

  • 如果memo[p]不等于n,说明这个位置的最少跳跃次数已经被计算过了,直接返回memo[p]的值。

  • 对于当前位置p,尝试所有可能的跳跃步数(从1到nums[p]),并递归地调用dp函数计算每一种选择后的最少跳跃次数。选择所有可能中的最小值加1(当前这一跳)作为memo[p]的值。

class Solution {// List<Integer> memo = new ArrayList<>();// 作为备忘录记忆int[] memo;// 记录每一个索引位置跳跃最后一个位置要多少次public int jump(int[] nums) {// 动态规划int n = nums.length;// 初始化备忘录memo = new int[n];Arrays.fill(memo,n);// 所有元素全部初始化为n 因为从0 到n - 1 不会超过n - 1return dp(nums,0);}int dp(int[] nums,int p){// 返回值  从索引p跳到最后一个位置所需要的最少次数int n = nums.length;if(p >= n - 1){return 0;}// 判断子问题是不是计算过if(memo[p] != n){return memo[p];}int steps = nums[p];// 然后从当前位置可以选择跳跃 1 2 3 4 5 ... steps步for(int i = 1; i <= steps;i++){// 跳跃i步 到下一个位置 然后计算结果int subProbelm = dp(nums, p + i);// 取其中最小的作为最终结果memo[p] = Math.min(memo[p],subProbelm + 1);}return memo[p];}
}

相关文章:

  • 数字创新的风口:创业者如何在Web3时代抢占先机
  • MySQL——事务
  • 铅酸蓄电池废水处理技术盘点
  • 重磅:2024广州国际酒店工程照明展览会
  • 鸿蒙 进程模型-公共事件
  • 设计模式——2_3 迭代器(Iterator)
  • 【JavaEE】_前端POST请求使用json向后端传参
  • 飞天使-学以致用-devops知识点3-安装jenkins
  • 中文版国产Figma简单好上手
  • 学术论文GPT的源码解读与二次开发:从ChatPaper到gpt_academic
  • CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)
  • FlyClient SPV client轻量化
  • 2403C++,C++20协程库
  • Vue router文件中本地路由配置使用i18n【解决tab名称出现undefined,导致i18n没有实现问题】
  • Android开发基础面试题,Android保活黑科技的技术实现
  • “大数据应用场景”之隔壁老王(连载四)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JAVA 学习IO流
  • Java精华积累:初学者都应该搞懂的问题
  • Service Worker
  • Wamp集成环境 添加PHP的新版本
  • Windows Containers 大冒险: 容器网络
  • 阿里云前端周刊 - 第 26 期
  • 从PHP迁移至Golang - 基础篇
  • 二维平面内的碰撞检测【一】
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 将 Measurements 和 Units 应用到物理学
  • 实现菜单下拉伸展折叠效果demo
  • 交换综合实验一
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​决定德拉瓦州地区版图的关键历史事件
  • # .NET Framework中使用命名管道进行进程间通信
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (C语言)逆序输出字符串
  • (Oracle)SQL优化技巧(一):分页查询
  • (二)linux使用docker容器运行mysql
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .gitignore文件—git忽略文件
  • .jks文件(JAVA KeyStore)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net framework4与其client profile版本的区别
  • .net 反编译_.net反编译的相关问题
  • .NET 回调、接口回调、 委托
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET建议使用的大小写命名原则
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • /var/spool/postfix/maildrop 下有大量文件
  • @property python知乎_Python3基础之:property
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [Asp.net mvc]国际化
  • [BZOJ] 2044: 三维导弹拦截