基础题型总结

数组:

  • 特点:数组在空间的地址是连续分布的,增加和减少都需要整体移动;

  • 经典题型:

    • 排序问题;
    • 二分法;
    • 双指针【快慢指针,相向指针】:双指针法将时间复杂度:O(n^2)的解法优化为 O(n)的解法。
    • 滑动窗口【双指针的变体【固定一个指针,移动另一个指针】,窗口内的变量只能向一个方向变化,eg求和,只能增加】;
    • 模拟行为【需要推导过程】
    • 前缀和【比滑动窗口更强,eg求和,可以增加和减少】

链表:

  • 特点:每个节点是单独存储,需要通过上一个节点获取下一个节点;
  • 经典题型:
    • 反转链表
    • 删除链表
    • 链表相交,环形判断;

哈希表:

  • 特点:能够通过O(1)获取、判断是否存在,去重元素;eg数组就是轻量级的哈希表;
  • 经典题型:
    • 异位词
    • 两数之和等【双指针,只能降解一个量级的计算】
      • 需要去重【则要排序,对应降解一个数量级】
      • 无需去重【对半降解数量级】
    • 前缀和;

字符串:

  • 特点:若干有限序列,或者字符数组,拥有字数的特性;
  • 经典题型:
    • 双指针法:填充问题,多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
    • 反转 + 旋转系列:先整体反转再局部反转,实现局部顺序的全局反转,或者左旋的实现;
    • 字符串匹配 + 重复问题:KMP算法,当字符串出现不匹配时,利用已经匹配的进行回退,避免重新匹配,关键在前缀表;

栈队和队列

  • 特点:栈和队列分别只是数据结构,是容器适配器,底层可以是链表也可能是数组;
  • 经典题型:
    • 有效括号;
    • 波兰表达式
    • 滑动窗口【单调队列】
    • 前k个高频元素【小顶堆,小顶堆【优先级队列】】
posted @ 2025-07-23 21:57  烟雨断桥  阅读(5)  评论(0)    收藏  举报