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

Leetcode 45. 跳跃游戏 II(DP 双指针)

Leetcode 45. 跳跃游戏 II

动态规划

使用dp [ ] 记录每个位置可达的最小步数,每到达一个点时,更新该点所能跳跃区间内的所有点的dp值
时间复杂度较高

class Solution {public int jump(int[] nums) {int n = nums.length;int dp[] = new int [n];int N = 99999;Arrays.fill(dp, N);dp[0] = 0;for(int i = 0 ; i < n; i ++){for(int j = 1 ; j <= nums[i]; j ++){if(i + j < n)dp[i + j] = Math.min(dp[i + j], dp[i] + 1);}}return dp[n-1];}
}

优化 双指针

双指针 l r 表示目前可达的区间左右端点,遍历区间维护一个可达的最远距离maxPos
当 l r 相遇即区间遍历结束后,将该区间内可达的最远距离maxPos作为下一次跳跃的区间右端点 r ,此时跳跃一步
当 r 可以到达边界时,即结束遍历
时间复杂度O(n)

class Solution {public int jump(int[] nums) {int n = nums.length;int l = 0;int r = 0;int maxPos = 0;int step = 0;while(r < n-1){maxPos = Math.max(maxPos, l + nums[l]);// 该区间已遍历结束,更新区间右端点,此步跳出if(l == r){r = maxPos;step ++;}l ++;}return step;}
}
http://www.lryc.cn/news/374006.html

相关文章:

  • Codeforces Round 952 (Div. 4)(实时更新)
  • 【AI实践】Dify开发应用和对接微信
  • 精准定位,智慧提纯:高级数据提取策略
  • USB转I2C转SPI芯片CH341与CH347比较
  • 期权无风险套利(Risk-Free Arbitrage)举例以及期权无套利定价公式
  • Java基础知识巩固自测(上)
  • 通过 Python+Nacos实现微服务,细解微服务架构
  • 如何使用new和delete操作符进行动态内存分配和释放?
  • 【SCAU数据挖掘】数据挖掘期末总复习题库选择题及解析
  • 顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)
  • 深度学习:使用argparse 模块
  • unity text根据文本内容自动设置高度
  • ARM 汇编 C语言 for循环
  • java:【@ComponentScan】和【@SpringBootApplication】扫包范围的冲突
  • 本学期嵌入式期末考试的综合项目,我是这么出题的
  • CSS概述
  • Tensorflow-GPU工具包了解和详细安装方法
  • 【python】OpenCV GUI——Trackbar(14.2)
  • Qt自定义日志输出
  • [C++] vector list 等容器的迭代器失效问题
  • Java——变量作用域和生命周期
  • WPF界面设计
  • 【C#】使用JavaScriptSerializer序列化对象
  • HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)
  • EasyRecovery2024数据恢复神器#电脑必备良品
  • 前端HTML相关知识
  • 集合面试题
  • 集成学习概述
  • 记录一次root过程
  • 函数(上)(C语言)