代碼面試算法相關技巧

  • 1.複雜度分析相關問題

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

 

使用樹形分析法計算時間複雜度

  • 2.遞歸和WhileLoop的選擇

遞歸問題須要注意是否會致使棧溢出,通常鏈表問題遞歸容易致使棧溢出問題;

面試時須要主動詢問面試官是否可使用遞歸實現,以及綜合考慮代碼實現的難度,遞歸的深度等。

遞歸的話:

      遞歸三要素:

    遞歸的定義

    遞歸的出口

    遞歸的拆解

  • 3.Goole Java Coding Style  

http://www.blogjava.net/zh-weir/archive/2014/02/08/409608.html

https://google.github.io/styleguide/javaguide.html

  •  4.n&(n - 1)的妙用

4.1 判斷一個數是否是2的方冪

  n > 0 && (n & (n - 1) == 0)

4.2 求一個數的二進制表示中"1"的個數(每次操做把最低的那個1換位0)

  while (n > 0)  {

    count++;

    n &= n-1;

  }  

相關文章
相關標籤/搜索