| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 力扣hot100 55题跳跃游戏打卡 -> 正文阅读 |
|
[数据结构与算法]力扣hot100 55题跳跃游戏打卡 |
2021年11月22日 给定一个非负整数数组? ?解题思路:从题目的要求来看做法应该是动态规划或者是贪心算法,此题两种算法均可解决。 方法一:贪心算法 用数组下标来记录位置的话,我们可以使用一个变量 rightMax 用来记录能够到达数组位置的最大值,通过for循环来不断的修改rightMax的值,一旦for循环中变量 i 走到的位置比目前的rightMax大,则循环结束,返回false。如果循环结束,没有问题,则返回true。 其中rightMax的更新方程为:Math.max(rightMax,i + nums[i])。 代码实现及提交结果如下图所示:
方法二:动态规划 动态规划方法的大致思路就是定义一个dp数组用来存储每个位置还能够向前走的最大步数,状态转移方程为:dp[i] = Math.max(dp[i-1]-1,num[i]),但是此题因为只需要使用 dp[i-1] 是否等于 0 来判断是否还能接着往回走,所以仅仅使用一个变量来保存dp[i]的值即可。 2.1:正常使用dp数组来进行计算 设定一个dp数组,dp[i]表示在下标i处能够跳跃的最大值。 代码和运行结果如下:
?2.1:使用常量来代替dp[i]进行计算 代码和结果如下:
? 总结:动态规划和贪心相比:贪心只是每一步都是最优,并且不考虑上一步的结果,但是动态规划的动态转移方程需要考虑到上一步甚至更上一步的状态。从两个方程便可明显的区别,贪心算法中,方程为:rightmax = Math.max(rightmax,i + nums[i]);很显然并没有用到上一步的结果。但是动态规划解题的状态转移方程当中,方程为:max = Math.max(dp[i-1]-1,num[i]),用到了上一步的最优结果。这也是区分贪心还是动态规划的一个地方。菜鸡,如有说错的地方,还望指出。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 15:27:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |