综合

  1. 刷题的过程就是在锻炼自己思维的过程, 在这过程中,能够提升自己对编程语言的熟练程度,同时又能对算法的具体实现步骤有深入的了解。
  2. 在实际项目的开发当中还是要尽量避免递归!因为项目代码参数、调用关系都比较复杂,不容易控制递归深度,甚至会栈溢出。

Time Complexity.png>)

数组

  1. 二分法的使用需要记住循环不变量,并且middle尽量用left+(right-left)/2来赋值,避免整形溢出
  2. 主要涉及 滑动窗口、双指针法、二分法(一般针对有序且无重复数组)(注意循环不变量)、哈希表的使用

链表

  1. 在设置visited数组时,不要老想着用int的0和1来判断是否已经遍历过,本题中使用unordered_set就很好
  2. 要灵活使用快慢指针,来检测是否有循环的产生
  3. 主要涉及 双指针法、链表的基本操作(添加、删除)、链表结点的声明

哈希表

  1. 在考虑对字符串或字符进行处理时,可以考虑使用数组,26个内存来存储每个字符地数目。下标使用ch-‘a’来求
  2. 学习用数组快速对map和set进行初始化
  3. 使用哈希表存放结果,来对结果进行去重处理。最后返回数组时,可以以
  1. return vector<int>(result_set.begin(), result_set.end());
  1. 的形式
  1. 主要涉及对数组/set/map的应用。

字符串

  1. 主要涉及KMP算法

栈与队列

  1. 主要涉及stack、queue、deque、priority_queue的使用

二叉树

  1. 心得体会 - 图2
  2. 二叉树的遍历:

    1. 二叉树遍历需要牢记递归遍历(前中后)、常规迭代遍历(前中后、层次)、颜色标记法遍历(前中后)
    2. 层次遍历一定要注意size变量的声明来避免que.size()的动态变化
  3. 二叉树的属性:

    1. 区分最大深度、最小深度,最小深度的判准要注意
    2. 求属性大部分时候都是使用后序遍历,某些时候如求路径需要使用前序遍历
  4. 二叉树的修改与构造:

    1. 构造二叉树需要记牢二叉树构造的方法(代码格式)
    2. 灵活使用哈希表来寻找切割点
  5. 二叉搜索树的属性:

    1. 牢记二叉搜索树的性质:“二叉搜索树按照中序遍历是从小到大的次序”。因此在做二叉搜索树相关的题目时,应当多用中序遍历
  6. 二叉树的公共祖先:
  7. 二叉搜索树的修改与构造: