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

EquationTimeSpaceExamples
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
    }
复制代码

 

posted @   小张的练习室  阅读(210)  评论(0)    收藏  举报
编辑推荐:
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
阅读排行:
· 独立项目运营一周年经验分享
· 一款开源免费、通用的 WPF 主题控件包
· .NET 9 + React 开发的企业级后台权限管理系统,文档齐全,轻松上手
· 神解释:为什么程序员怕改需求?
· 【定时任务核心】究竟是谁在负责盯着时间,并在恰当时机触发任务?
点击右上角即可分享
微信分享提示