DEV Community

Jaspreet singh
Jaspreet singh

Posted on

Implement a Max Heap

Problem Statement

Implement a Max Heap supporting:

push(x)
pop()
peek()
size()
Enter fullscreen mode Exit fullscreen mode

Intuition

A Max Heap always keeps:

Largest Element at Top
Enter fullscreen mode Exit fullscreen mode

Java provides:

PriorityQueue
Enter fullscreen mode Exit fullscreen mode

which is Min Heap by default.

To create Max Heap:

new PriorityQueue<>(
    Collections.reverseOrder()
);
Enter fullscreen mode Exit fullscreen mode

Java Implementation

class maxHeap {

    PriorityQueue<Integer> pq;

    public maxHeap() {

        pq =
          new PriorityQueue<>(
              Collections.reverseOrder()
          );
    }

    public void push(int x) {
        pq.add(x);
    }

    public void pop() {
        pq.poll();
    }

    public int peek() {

        return pq.isEmpty()
               ? -1
               : pq.peek();
    }

    public int size() {
        return pq.size();
    }
}
Enter fullscreen mode Exit fullscreen mode

Dry Run

push(10)

push(5)

push(20)
Enter fullscreen mode Exit fullscreen mode

Heap:

20
10
5
Enter fullscreen mode Exit fullscreen mode
peek()
Enter fullscreen mode Exit fullscreen mode

Returns:

20
Enter fullscreen mode Exit fullscreen mode
pop()
Enter fullscreen mode Exit fullscreen mode

Removes:

20
Enter fullscreen mode Exit fullscreen mode

New Top:

10
Enter fullscreen mode Exit fullscreen mode

Complexity Analysis

Operation Complexity
Push O(log N)
Pop O(log N)
Peek O(1)
Size O(1)

Interview One-Liner

A Max Heap maintains the largest element at the root, allowing efficient insertion and deletion in logarithmic time.


Pattern Learned

Kth Largest
Top K
Merge K Lists
Median Stream

=> Heap
Enter fullscreen mode Exit fullscreen mode

Top comments (0)