基础数据结构
1.时间复杂度
数据结构 | 根据索引查找 | 根据关键字查找 | 插入 | 删除 |
---|---|---|---|---|
数组(Array) | O(1) | O(n) | O(n) | O(n) |
队列(queue) | O(n) | O(n) | O(1) | O(1) |
链表(Linked list) | O(n) | O(n) | O(1) | O(1) |
二叉树(Binary Search Tree) 平均情况 | O(log(n)) | O(log(n)) | O(log(n)) | |
二叉树(Binary Search Tree) 最坏 | O(n) | O(n) | O(n)) |
2.空间复杂度
数据结构 | 数组 | 队列 | 链表 | 二叉树 |
---|---|---|---|---|
空间复杂度 | O(1) | O(1) | O(1) | O(1) |
高级数据结构
数据结构 | 各类操作时间复杂度 | 能够解决哪些问题 | 面试考察频率 | 学习难度 |
---|---|---|---|---|
堆(Heap) | O(log(n)): push, pop; O(1):top | 全局动态找最大最小 | 高 | 低 |
哈希表(Hash table) | O(1): insert, find, delete | 查询元素是否存在,key-value查询问题 | 高 | 低 |
前缀树(Trip) | O(1): insert, find, delete | 和哈希表解决问题类似,查询元素是否存在,key-value查询问题 | 中 | 低 |
并查集(UnionFind) | O(1): union, find | 动态合并集合并判断两个元素是否在同一个集合 | 中 | 低 |
平衡排序二叉树(Balanced BST) | O(log(n)): insert, find, delete, max, min, lower, upper | 动态增删查改并支持找全局最大最小值; 找比某个数大的最小值和比某个数小的最大值可以用(尽可能接近) | 低 | 高 |
跳跃表(Skip List) | O(log(n)): insert, find, delete, max, min, lower, upper | 和Balanced BST解决的问题一样,并能一直维持一个有序链表 | 低 | 高 |
树状数组(Binary Indexed Tree) | O(log(n)): insert, delete, range, sum | 增删改的同时,解决区间求和问题 | 低 | 中 |
线段树(Segment Tree) | O(log(n)): insert, find, delete, range max, range min, range sum, lower, upper; O(1):global max, global min | 增删改的同时,解决区间求值问题, max, min, sum 等等可以完全替代 | 低 | 中 |
2.空间复杂度
数据结构 | 堆 | 哈希表 | 前缀树 | 并查集 | 平衡排序二叉树 | 跳跃表 | 树状数组 | 线段树 |
---|---|---|---|---|---|---|---|---|
空间复杂度 | O(1) | O(1) | O(1) | O(1) | O(1) | O(1) | O(log(n)) | O(1) |