复杂度

时间复杂度

  1. - O(1)常数复杂度 最佳,Hash 缓存
  2. - O(logn) 第二佳 二分查找 二叉搜索树
  3. - O(n) 线性复杂度 一般的遍历
  4. - O(n^2) 双重for循环
  5. - O(2^n) 递归

空间复杂度

  1. - O(1) 原地操作
  2. - O(n) 开辟辅助空间

数组

  • 连续空间
  • 查找快 插入删除慢

链表

  • 离散空间
  • 查找慢 插入删除快

  • 先进后出

队列

  • 先进先出

映射

  • K/V键值对 K不重复

集合

  • Key不重复

并查集

  • 站队问题
  • 初始化
  • 查询 合并
  • 路径压缩

二叉树

  1. - 遍历
  2. - DFS
  3. - BFS
  4. - 二叉搜索树
  5. - 平衡二叉树
  6. - AVL
  7. - 红黑树
  8. - 剪枝

字典树

  1. - 空间换时间

  • 遍历时需记录已访问的结点

递归、分治

  • 盗梦空间
  • 终止状态
  • 本层处理
  • Drill Down
  • 本层状态清除

二分查找

  • 有序
  • 有界
  • 随机访问

贪心算法

  • 判断能否贪心
  • 弱化版动态规划

动态规划

  • 简单版
    • 递归加缓存
  • 高级版
    • 递推公式
  • 状态的定义
    • 有些有模版
  • 最优子结构
  • 状态转移方程

位运算

  • 需要记忆一些常见的位运算公式

布隆过滤器

  • 判断100%不存在
  • 判断存在时可能有误差
  • 利益Hash函数将待判断的Key对应到多个位上

LRU

  • HashTable+双向链表
  • get和set都是O(1)