Commonly Used Data Structures And Time Complexity
Trie
Time Complexity
Insert/search O(l), l is the length of the word
Space Complexity
O(prefixes), O(n * l * l) n words with length l
Binary Search Tree
H is the height of the tree, if the tree is balanced, h = logn
Data Structure |
get |
search |
insert |
delete |
Array |
O(1) |
O(n) |
O(n) |
O(n) |
ArrayList |
O(1) |
O(n) |
O(1) |
O(1) |
LinkedList |
O(n) |
O(n) |
O(1) |
O(1) |
Stack |
O(n) |
O(n) |
O(1) |
O(1) |
PriorityQueue |
O(logn) |
O(n) |
O(logn ) |
O(n) |
HashMap |
O(1) |
O(1) |
O(1) |
O(1) |
TreeMap |
O(logn) |
O(n) |
O(logn) |
O(logn) |
HashSet |
O(1) |
O(1) |
O(1) |
O(1) |
Trie |
O(L) |
O(L) |
O(L) |
O(L) |
B Tree |
O(logn) |
O(logn) |
O(logn) |
O(logn) |
Binary Search Tree |
O(h) |
O(h) |
O(h) |
O(h) |
Master Theorem Cheatsheet
Equation | Time | Space | Examples |
---|---|---|---|
T(n) = 2*T(n/2) + O(n) | O(nlogn) | O(logn) | quick_sort |
T(n) = 2*T(n/2) + O(n) | O(nlogn) | O(n + logn) | merge_sort |
T(n) = T(n/2) + O(1) | O(logn) | O(logn) | Binary search |
T(n) = 2*T(n/2) + O(1) | O(n) | O(logn) | Binary tree traversal |
T(n) = T(n-1) + O(1) | O(n) | O(n) | Binary tree traversal |
T(n) = T(n-1) + O(n) | O(n^2) | O(n) | quick_sort(worst case) |
T(n) = n * T(n-1) | O(n!) | O(n) | permutation |
T(n) = T(n-1)+T(n-2)+…+T(1) | O(2^n) | O(n) | combination |
@Test public void testQueue() { Queue<String> queue = new LinkedList<>(); queue.offer("a"); queue.offer("b"); System.out.println(queue.peek()); // a System.out.println(queue.poll()); // a } @Test public void testStack() { Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.peek()); // b System.out.println(stack.pop()); // b } @Test public void testDeque() { Deque<String> deque = new LinkedList<>(); String[] array = {"1", "2", "3", "4"}; // used as a stack for (String ele: array) { deque.push(ele); } System.out.println(deque.peekFirst()); // 4 System.out.println(deque.peekLast()); // 1 System.out.println(deque.pop()); // 4 System.out.println(deque.removeFirst()); // 3 System.out.println(deque.removeLast()); // 1 deque.clear(); // used as a queue for (String ele: array) { deque.offer(ele); } System.out.println(deque.peekFirst()); // 1 System.out.println(deque.peekLast()); // 4 System.out.println(deque.poll()); // 1 System.out.println(deque.removeFirst()); // 2 System.out.println(deque.removeLast()); // 4 } @Test public void testPriorityQueue() { Integer[] array = {3, 1, 4, 2}; // By default it is a min heap PriorityQueue<Integer> minHeap = new PriorityQueue<>(); for (Integer ele: array) { minHeap.offer(ele); } System.out.println(minHeap.poll()); // 1 // Create a max heap PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); // PriorityQueue<Integer> maxHeap = new PriorityQueue<>((x, y) -> y - x); for (Integer ele: array) { maxHeap.offer(ele); } System.out.println(maxHeap.poll()); // 4 }
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
· 独立项目运营一周年经验分享
· 一款开源免费、通用的 WPF 主题控件包
· .NET 9 + React 开发的企业级后台权限管理系统,文档齐全,轻松上手
· 神解释:为什么程序员怕改需求?
· 【定时任务核心】究竟是谁在负责盯着时间,并在恰当时机触发任务?