代码面试算法相关技巧

  • 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;

  }  

相关文章
相关标签/搜索