O(1)是極少出現的html
O(log n)通常很天然的就須要往二分方向思考java
O(sqrt(n)) 分解質因數git
O(n)github
O(nlog(n))通常可能須要排序面試
O(n^2)、O(n^3)數組、枚舉、動態規劃數組
O(2^n)與組合有關的搜索ide
O(n!)與排列有關的搜索oop
T(n)=2T(n/2)+O(n) O(nlog(n))ui
T(n)=2T(n/2)+O(1) O(n)google
使用樹形分析法計算時間複雜度
遞歸問題須要注意是否會致使棧溢出,通常鏈表問題遞歸容易致使棧溢出問題;
面試時須要主動詢問面試官是否可使用遞歸實現,以及綜合考慮代碼實現的難度,遞歸的深度等。
遞歸的話:
遞歸三要素:
遞歸的定義
遞歸的出口
遞歸的拆解
http://www.blogjava.net/zh-weir/archive/2014/02/08/409608.html
https://google.github.io/styleguide/javaguide.html
4.1 判斷一個數是否是2的方冪
n > 0 && (n & (n - 1) == 0)
4.2 求一個數的二進制表示中"1"的個數(每次操做把最低的那個1換位0)
while (n > 0) {
count++;
n &= n-1;
}