九章算法:独孤九剑

这逼课上了也没啥用,都是很粗线条的框架,说了跟没说似的。哦不,独孤九剑有用。

(大部分来自天纯的pdf笔记)
不咋考:如果问连通性,静态就是 DFS,BFS,动态就 UF
不咋考:如果问依赖性就 topo sort
不咋考:DAG有向没环路图 的问题就 dfs+memo 
确实要小心但其实也不咋考:矩阵和 Array 通常都是 DP
确实要小心但其实也不咋考:问数量的通常都是 DP
确实要小心但其实也不咋考:问是否可以,也很有可能 DP

加了:求所有解的,基本 backtracking
排序总是可以想一想的
万事总可以想HashMap
找规律试试Stack

碰到二叉树的问题,就想想整棵树在该问题上的结果 和左右儿子在该问题上的结果之间的联系是什么

独孤九剑 —— 破剑式:比O(n)更优的时间复杂度 几乎只能是O(logn)的二分法

独孤九剑——破枪式
能够用 BFS 解决的问题,一定不要用 DFS 去做! 因为用 Recursion 实现的 DFS 可能造成 StackOverflow!
(NonRecursion 的 DFS 一来你不会写,二来面试官也看不懂) 

总结:先想最短路的BFS,再想所有路的DFS(backtracing)

独孤九剑 —— 破鞭式 碰到让你找所有方案的题,一定是DFS。 90%DFS的题,要么是排列,要么是组合

独孤九剑 —— 破索式 链表结构发生变化时,就需要 Dummy Node

独孤九剑 —— 破掌式 对于求 2 个变量如何组合的问题,可以循环其中一个变量,然后研究另外一个变量如何变化

独孤九剑 —— 破箭式 BFS 的主要数据结构是 Queue
DFS 的主要数据结构是 Stack 千万不要搞反了!很体现基础知识的扎实度!

原文地址:https://www.cnblogs.com/immiao0319/p/12116457.html