一、前言:什么是动态规划
用一句话概括:走一步看一步。用一个生动例子来跟大家说!爬楼梯~~~
假设你现在正在爬楼梯,楼梯有 n 级。每次你只能爬 1 级或者 2 级,那么你有多少种方法爬到楼梯的顶部?
这个问题怎么解呢?身为理工男,凡事没有表达式不能解决的! 首先我们先设F(n)是爬n级楼梯的方法数量。
因为其中我们只能爬1级或2级。所以我们到达n级的之前的一步肯定是n-1级或者n-2级!
所以当我们走到n级的时候,就看走到n-1和n-2的方法,这就是走一步看一步!
我们就可以列出美丽的公式了:F(n)=F(n-1)+F(n-2) n>2
初始值是F(1)=1 F(2)=1 然后for就可以计算走每一级的总数了!!!! 这那么简单! 千万比要想的太难!!
二、动态规划:自己的总结
1.递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算。
2.动态规划,比较通俗的解法,搞一个dp数组,存之前的结果(什么总数,什么次数啊)
但是很多情况都可以将这个数组换成两个变量(记录变化),节约空间复杂度
3.动态规划=穷举+剪枝
一般情况 都会嵌套两层for循环dp[][];如果dp[]那么就是一个for,状态转移。,去找每个状态点与之前每个状态点的区别,取最利于我们的情况放入dp数组。在循环的时候如果dp数组+1了,那么for要<=。初始化还是要分情况。不同情况初始化不同值,多看例题
4.说到什么序列,很容易就是动态规划,尤其是那种还有加了条件的序列更容易成为动态规划的对象,因为条件会存在一个值,然后就是逮着这个值进行比较,之后进行下一步
三、一切理论都源于实践,多刷题领悟其中精髓才能真正掌握!
四、动态规划相关的面试高频题目录
1.爬楼梯(力扣 70) 斐波那数列 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750362
2.打家劫舍II(力扣213) 斐波那数列 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750623
3.不同的路径(力扣62)矩形路径 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750705
4.等差数列划分(力扣413)数组区间 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750803
5.整数拆分(力扣343)分割整数 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750889
6.解码方法(力扣91)分割整数 博主的笔记思路及代码讲解:https://blog.csdn.net/qq_40262372/article/details/112750979
五、各种类型的高频面试题汇总:
https://blog.csdn.net/qq_40262372/article/details/112556249
六、如有疑问可加QQ群讨论:725936761 博主免费答疑
欢迎大家一起讨论进步。后续遇到相似的题会继续更新!
为了鼓励大家坚持,当天打卡人数超过一半,群主发一个红包(群主是学生),激励大家坚持下去!希望以后找工作的时候大家能互捞一下~~~
群里已有字节、滴滴大佬,可帮忙内推!也欢迎其他大厂的工作人士进群!帮忙内推~
B站视频讲解如何三个月学习JAVA拿到实习Offer:
https://www.bilibili.com/video/BV1dV411t71K