1. (Q1, Two Sum) 对于关联容器map,在STL库中,map
2. (Q167,Two Sum II) From int to string: to_string(num); From stringto int: atoi(str.c_str()); From char to int: int a=10; char c=a-'0';
3. (Q7,ReverseInteger) 乘方: pow(num, index) means"num^index".
4.(Q66,Plus One) vector的用法: vector
5. (Q189,Rotate Array) 对于一个数组arr,长度为n,向右移位k,O(1)的空间复杂度,只需要做三次翻转:[0,n-k-1], [n-k,n-1], [0,n-1].
6.(Q118,Pascle's Triangle) 二维vector,初始化可以为vector
7. (Q53,Maximum Subarray) 题目涉及到最大最小值时,初始化的数字可以设置为INT_MIN,INT_MAX比较安全。这是因为
8. (Q28,Implement strStr()) 截取字符串s的其中一部分,可以用include
9. (Q326,Power of Three) 判断一个数n为整数,可以用n-(int)n==0判断。
10. (Q69,Sqrt(x)) 判断mid*mid==x是否成立的时候,可能会存在mid数值过大,导致mid*mid过大溢出。方法可以采用mid==x/mid判断(需要mid和x均为int型)。
11. (Q204,Count Primes) 初始化一个动态数组,可以采用int *array=new int[N](); 这样就可以直接调用和赋值而不需要初始化,例如array[3]这样。此外,在数n之前有多少素数这个问题,为了降低时间复杂度,可以采用厄拉多塞筛法,即定义一个被选数组用于作标记,空间复杂度O(n),时间复杂度O(nloglogn)。
12. 一些常识:
(1)如果面试官限定不可以用递归实现代码,可以考虑用栈来模拟递归的过程(例如二叉树的前中后序遍历);
(2)BFS可以采用队列的数据结构来暂时存储(例如二叉树的层序遍历);
(3)青蛙跳台阶问题可以抽象成斐波那契数列(如果青蛙每次可以跳一阶也可以跳两阶),如果青蛙每次可以跳1~n阶,那么f(n)=2^(n-1),可以用数学归纳法证明。当然,用8个2*1的小矩形去无重叠覆盖2*8大矩形的方法个数,也可以抽象为斐波那契数列;