综合
- 刷题的过程就是在锻炼自己思维的过程, 在这过程中,能够提升自己对编程语言的熟练程度,同时又能对算法的具体实现步骤有深入的了解。
- 在实际项目的开发当中还是要尽量避免递归!因为项目代码参数、调用关系都比较复杂,不容易控制递归深度,甚至会栈溢出。
.png>)
数组
- 二分法的使用需要记住循环不变量,并且middle尽量用left+(right-left)/2来赋值,避免整形溢出
- 主要涉及 滑动窗口、双指针法、二分法(一般针对有序且无重复数组)(注意循环不变量)、哈希表的使用
链表
- 在设置visited数组时,不要老想着用int的0和1来判断是否已经遍历过,本题中使用unordered_set就很好
- 要灵活使用快慢指针,来检测是否有循环的产生
- 主要涉及 双指针法、链表的基本操作(添加、删除)、链表结点的声明
哈希表
- 在考虑对字符串或字符进行处理时,可以考虑使用数组,26个内存来存储每个字符地数目。下标使用ch-‘a’来求
- 学习用数组快速对map和set进行初始化
- 使用哈希表存放结果,来对结果进行去重处理。最后返回数组时,可以以
return vector<int>(result_set.begin(), result_set.end());
的形式
- 主要涉及对数组/set/map的应用。
字符串
- 主要涉及KMP算法
栈与队列
- 主要涉及stack、queue、deque、priority_queue的使用
二叉树
二叉树的遍历:
- 二叉树遍历需要牢记递归遍历(前中后)、常规迭代遍历(前中后、层次)、颜色标记法遍历(前中后)
- 层次遍历一定要注意size变量的声明来避免que.size()的动态变化
二叉树的属性:
- 区分最大深度、最小深度,最小深度的判准要注意
- 求属性大部分时候都是使用后序遍历,某些时候如求路径需要使用前序遍历
二叉树的修改与构造:
- 构造二叉树需要记牢二叉树构造的方法(代码格式)
- 灵活使用哈希表来寻找切割点
二叉搜索树的属性:
- 牢记二叉搜索树的性质:“二叉搜索树按照中序遍历是从小到大的次序”。因此在做二叉搜索树相关的题目时,应当多用中序遍历
- 二叉树的公共祖先:
- 二叉搜索树的修改与构造:
