终拿字节Offer...动态规划复盘...
大家好!我是 Johngo 呀!
和大家一起刷题不快不慢,没想到已经进行到了第二阶段,「动态规划」这部分题目很难,而且很不容易理解,目前我的题目做了一半,凭着之前对于「动态规划」的理解和最近做的题目做一个阶段性的总结!这篇文章其实是我之前写过的一篇,然后现在拿来再做一个润色。
「动态规划」看这篇我…保证可以!
目标:给小白以及没有明确思路的同学一个指引!
拍胸脯保证:读完这篇文章,对于大多数的动态规划的思维逻辑能有一个质的提升。
本文较长,建议先收藏,或者直接到 GitHub 中下载文档(https://github.com/xiaozhutec/share_leetcode.git)
那么,咱们开始吧…
零、初印象
动态规划,一直以来听着就是一种很高深莫测的算法思想。
尤其是上学时候算法的第一堂课,老师巴拉巴拉列了一大堆的算法核心思想,贪心、回溯、动态规划… …,开始感觉要在算法世界里游刃有余的进行解决各种各样牛B问题了,没想到的还是稀里糊涂学过了之后还就真的是学过了(大学的课程还真是一个样子)。
再后来才明白,大学的课程一般来说就是入门级讲解,用来开拓眼界,真正想要有一番自己的见解,必须要在背后下一番辛苦,形成自己的思考逻辑。tips:这个思考逻辑一定是要有记录的,是真的有时候会忘记。
再后来返回头来看,动态规划理解起来还是比较困难,重叠子问题、动态转移方程,优化点等等等等,稀里糊涂,最后痛定思痛,好好看着其他人的分享理解了一部分,在之后疯狂刷题几十道。现在回过头来再看,算是基本可以佛挡杀佛了。
在我的这些学习积累过程中,把一部分「动态规划」的问题复盘出来。希望可以给到大家一点小小的帮助,相信在读完这篇文章的时候,你会感觉到动态规划给你带来的奇妙之处。也一定对动态规划形成自己的思考方式。
相信我!这不是一篇难以读懂的文章!
一、本文要点
1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的?
2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次!
「动态规划」思维逻辑
看完本篇文章后,相信大家会对DP问题会有一个初步的思考,一定会入门。后面大家可以继续练习相关问题,熟能生巧,思考的多了就会形成自己的思维逻辑。
好了,话不多说,开搞…
二、动态规划带来的优势
看完定有收获,加油!