-
1.复杂度分析相关问题
O(1)是极少出现的
O(log n)一般很自然的就需要往二分方向思考
O(sqrt(n)) 分解质因数
O(n)
O(nlog(n))一般可能需要排序
O(n^2)、O(n^3)数组、枚举、动态规划
O(2^n)与组合有关的搜索
O(n!)与排列有关的搜索
T(n)=2T(n/2)+O(n) O(nlog(n))
T(n)=2T(n/2)+O(1) O(n)
使用树形分析法计算时间复杂度
-
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;
}