1、若是要在数组中进行搜索时,率先考虑二分查找,但是二分查找适用于有序的数组,而有时数组中的元素是无序的,就要根据条件查找哪里是有序的。
    2、要重点掌握二分查找、归并排序、快速排序
    3、若面试题要求在二维数组上搜索路径,可以尝试使用回溯法,回溯法很适合与递归结合,若是有要求说不能使用递归,则可以用栈来模拟递归的过程。
    4、若面试题是求某个问题的最优解,并且该问题可以分为多个子问题,那么可以尝试使用动态规划。在采用自上而下的的递归思路去分析动态规划问题的时候,我们会发现子问题之间存在重叠的更小的子问题。为了避免不必要的重复计算,可以采用自下而上的循环代码来实现,也就是把子问题的最优解先算出来并用数组保存下来,接下来基于子问题的解计算大问题的解。
    5、位运算:与、或、异或、左移、右移。
    6、在做一道反转整数的题目,里边有一种溢出的情况需要考虑

    1. class Solution {
    2. public int reverse(int x) {
    3. // 看了大佬的解法 神了,关键是要预防溢出的情况
    4. int rec = 0;
    5. while(x != 0){
    6. // 这个地方太巧妙了,用来判断是否有溢出
    7. if((rec * 10) / 10 != rec){
    8. rec = 0;
    9. break;
    10. }
    11. rec = rec * 10 + x % 10;
    12. x /= 10;
    13. }
    14. return rec;
    15. }
    16. }

    7、当数据量特别特别小时,直接用switch比用map要得多。
    8、入门动态规划(第三种方法的思想)

    1. 通常我们遍历子串或者子序列有三种遍历方式
    2. - 以某个节点为开头的所有子序列: [a],[a, b],[ a, b, c] ... 再从以 b 为开头的子序列开始遍历 [b] [b, c]。
    3. - 根据子序列的长度为标杆,如先遍历出子序列长度为 1 的子序列,在遍历出长度为 2 等等。
    4. - 以子序列的结束节点为基准,先遍历出以某个节点为结束的所有子序列,因为每个节点都可能会是子序列的结束节点,因此要遍历下整个序列,如: b 为结束点的所有子序列: [a , b] [b] c 为结束点的所有子序列: [a, b, c] [b, c] [ c ]。

    9、很神奇的题目:最大的子序和