贪心算法
算法流程
- 建立数学模型来描述问题
- 把求解的问题分成若干个子问题
- 对每一子问题求解,得到子问题的局部最优解
- 把子问题的局部最优解合成原来问题的一个解五分钟了解一下什么是「贪心算法 」把子问题的局部最优解合成原来问题的一个解
![a7d83801fab1a738f0a6a8f070048728.png](https://i-blog.csdnimg.cn/blog_migrate/0e5cc578d47b2e3804d567fa203a09ac.jpeg)
动态规划
”记住你之前做过的事,记住你之前得到的答案“
找出问题之间的联系,记住答案
算法步骤
- 问题拆解,找到问题之间的具体联系
- 状态定义
- 递推方程推到
- 实现
LeetCode 第 70 号问题 爬楼梯
LeetCode 第 120 号问题:三角形最小路径和
LeetCode 第 53 号问题:最大子序和
进阶版
LeetCode 第 300 号问题:最长上升子序列
Leetcode 第 121 号问题:买卖股票的最佳时机
Leetcode 第 122 号问题:买卖股票的最佳时机II
(再进阶版)有了四步解题法模板,再也不害怕动态规划!-五分钟学算法www.cxyxiaowu.com![b6398b9a7b8984a7e0f229128310fe83.png](https://i-blog.csdnimg.cn/blog_migrate/9cc288d58b0bce0d9bb253dbab9e0d83.png)
![37e2b8ac1e45435a804a1676d6d8a0ad.png](https://i-blog.csdnimg.cn/blog_migrate/41bc6388870b85ea2c607f0f4db0e01a.jpeg)
分治算法
算法步骤
- 分解:将原问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。
- 求解:若子问题规模较小而容易被解决则直接解,否则递归的解决各个子问题。
- 合并:将各个子问题的解合并为原问题的解。
LeetCode 第 704 号问题:二分查找
LeetCode 第 49号问题:全排列 这道题真的是经典啊 太经典了
LeetCode 第 47 号问题:全排列 II
LeetCode 第567 号题目 : 字符串的排列
LeetCode 面试题0806 : 汉诺塔问题
递归思想:
- 一个问题的解可以分解为几个字问题的解
- 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
- 存在递归终止条件,即必须有一个明确的递归结束条件,称为递归窗口
参考
程序员必须掌握哪些算法?www.zhihu.com![d30d18ed65f5d7dba3a6959914ecee91.png](https://i-blog.csdnimg.cn/blog_migrate/c7868ee640dc0b1296bf84013e7a9d1d.jpeg)