基础题型总结
数组:
-
特点:数组在空间的地址是连续分布的,增加和减少都需要整体移动;
-
经典题型:
- 排序问题;
- 二分法;
- 双指针【快慢指针,相向指针】:双指针法将时间复杂度:O(n^2)的解法优化为 O(n)的解法。
- 滑动窗口【双指针的变体【固定一个指针,移动另一个指针】,窗口内的变量只能向一个方向变化,eg求和,只能增加】;
- 模拟行为【需要推导过程】
- 前缀和【比滑动窗口更强,eg求和,可以增加和减少】
链表:
- 特点:每个节点是单独存储,需要通过上一个节点获取下一个节点;
- 经典题型:
- 反转链表
- 删除链表
- 链表相交,环形判断;
哈希表:
- 特点:能够通过O(1)获取、判断是否存在,去重元素;eg数组就是轻量级的哈希表;
- 经典题型:
- 异位词
- 两数之和等【双指针,只能降解一个量级的计算】
- 需要去重【则要排序,对应降解一个数量级】
- 无需去重【对半降解数量级】
- 前缀和;
字符串:
- 特点:若干有限序列,或者字符数组,拥有字数的特性;
- 经典题型:
- 双指针法:填充问题,多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
- 反转 + 旋转系列:先整体反转再局部反转,实现局部顺序的全局反转,或者左旋的实现;
- 字符串匹配 + 重复问题:KMP算法,当字符串出现不匹配时,利用已经匹配的进行回退,避免重新匹配,关键在前缀表;
栈队和队列
- 特点:栈和队列分别只是数据结构,是容器适配器,底层可以是链表也可能是数组;
- 经典题型:
- 有效括号;
- 波兰表达式
- 滑动窗口【单调队列】
- 前k个高频元素【小顶堆,小顶堆【优先级队列】】

浙公网安备 33010602011771号