- 剪绳子最大
把绳子大小分为3,以及总长度余3的大小(具体看题意)
- 滑动窗口
什么是滑动窗口?
其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!
如何移动?
我们只要把队列的左边的元素移出就行了,直到满足题目要求!
一直维持这样的队列,找出队列出现最长的长度时候,求出解!
时间复杂度:O(n)
- 回溯
遍历,递归(注意出口条件),可以轻易写出完整的回溯算法。
根据回溯法框架解题
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
- 动态规划
找出之间的关系,理清局部与整体的关系,
(1)状态
理解状态的定义的由来、会列出状态转移方程;
「状态转移方程」是原始问题的不同规模的子问题的联系。即大问题的最优解如何由小问题的最优解得到。
(2)思考状态转移方程
归纳「状态转移方程」是一个很灵活的事情,通常是具体问题具体分析;
「动态规划」方法依然是「空间换时间」思想的体现,常见的解决问题的过程很像在「填表」
(3)思考初始化
初始化是非常重要的,一步错,步步错。初始化状态一定要设置对,才可能得到正确的结果。
(4)思考输出
可能最后一个状态,也可能是综合之前所有计算过的状态。
(5)思考优化空间
- 贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,
总是做出在当前看来是最好的选择。也就是说,
不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
通过局部最优解得到全局最优解。
...
- 双指针
快慢指针,链表操作...
- 搜索
BFS
DFS
回溯
持续更新…