Bird
Raised Fist0
DSA Javaprogramming~10 mins

Median of Data Stream Using Two Heaps in DSA Java - Execution Trace

Choose your learning style10 modes available
Concept Flow - Median of Data Stream Using Two Heaps
New number arrives
↓
Compare with max-heap root
↓
Add to max-heap
↓
Balance heaps if size difference > 1
↓
Calculate median from roots
↓
Output median
New numbers go to one of two heaps (max-heap for smaller half, min-heap for larger half). Heaps are balanced to keep sizes close. Median is from roots.
Execution Sample
DSA Java
addNum(10)
addNum(20)
addNum(30)
findMedian()
Add numbers 10, 20, 30 to heaps and find median after all insertions.
Execution Table
StepOperationMax-Heap NodesMin-Heap NodesBalance ActionMedian CalculationVisual State
1Add 10[10][]No balance neededMedian = 10Max-Heap: [10] Min-Heap: []
2Add 20[10][20]No balance neededMedian = (10 + 20)/2 = 15Max-Heap: [10] Min-Heap: [20]
3Add 30[10, 20][30]Balance: Move 10 from max-heap to min-heapMedian = 20Max-Heap: [20] Min-Heap: [10, 30]
4Find Median[20][10, 30]Heaps balancedMedian = 20Max-Heap: [20] Min-Heap: [10, 30]
💡 All numbers processed; median found from heap roots.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4
maxHeap[][10][10][20][20]
minHeap[][][20][10, 30][10, 30]
medianN/A10152020
Key Moments - 3 Insights
Why do we add numbers to two different heaps instead of one?
We split numbers into two heaps to keep track of smaller and larger halves separately, making median calculation easy from the roots (see execution_table steps 1-3).
Why do we sometimes move elements between heaps?
To keep heaps balanced in size (difference at most 1), we move elements when one heap becomes too big (see step 3 balance action).
How is the median calculated when heaps have different sizes?
If heaps sizes differ, median is root of the bigger heap; if equal, median is average of both roots (see steps 2 and 3 median calculation).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the median value?
A15
B10
C20
D30
💡 Hint
Check the 'Median Calculation' column at step 2 in execution_table.
At which step does the balancing of heaps occur?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Balance Action' column in execution_table for when elements move between heaps.
If we add a smaller number than all existing, which heap will it go to?
ABoth heaps equally
BMax-Heap
CMin-Heap
DNeither heap
💡 Hint
Refer to concept_flow where smaller numbers go to max-heap.
Concept Snapshot
Use two heaps: max-heap for smaller half, min-heap for larger half.
Add new number to correct heap based on comparison.
Balance heaps if size difference > 1 by moving root.
Median is root of bigger heap or average of roots if equal size.
Efficient for streaming data median calculation.
Full Transcript
This concept uses two heaps to find the median of a data stream efficiently. When a new number arrives, it is compared with the root of the max-heap (which holds the smaller half of numbers). If smaller, it goes to max-heap; otherwise, to min-heap (larger half). After insertion, heaps are balanced to keep their sizes close, moving the root element if needed. The median is then calculated from the roots: if heaps are equal size, median is average of roots; if not, median is root of the bigger heap. This approach allows quick median updates as new numbers come in.

Practice

(1/5)
1. What is the main purpose of using two heaps (a max heap and a min heap) in the Median of Data Stream problem?
easy
A. To store all numbers in a single data structure
B. To sort all numbers in ascending order
C. To efficiently keep track of the lower half and upper half of the numbers for median calculation
D. To find the maximum number in the data stream

Solution

  1. Step 1: Understand the role of two heaps

    The max heap stores the smaller half of the numbers, and the min heap stores the larger half.
  2. Step 2: Explain median calculation

    By balancing these heaps, the median can be found quickly from the top elements of the heaps.
  3. Final Answer:

    To efficiently keep track of the lower half and upper half of the numbers for median calculation -> Option C
  4. Quick Check:

    Two heaps split data for median [OK]
Hint: Two heaps split data into halves for quick median [OK]
Common Mistakes:
  • Thinking heaps sort all numbers completely
  • Using only one heap for median
  • Confusing max heap and min heap roles
2. Which of the following Java code snippets correctly initializes a max heap using PriorityQueue for the Median of Data Stream problem?
easy
A. PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
B. PriorityQueue<Integer> maxHeap = new PriorityQueue<>();
C. PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.naturalOrder());
D. PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.naturalOrder());

Solution

  1. Step 1: Identify max heap initialization

    Java's PriorityQueue is a min heap by default; to make max heap, use Collections.reverseOrder().
  2. Step 2: Check options

    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); uses Collections.reverseOrder(), which correctly creates a max heap.
  3. Final Answer:

    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); -> Option A
  4. Quick Check:

    Max heap needs reverse order comparator [OK]
Hint: Use Collections.reverseOrder() for max heap in Java [OK]
Common Mistakes:
  • Using default PriorityQueue without comparator
  • Using naturalOrder() which is min heap
  • Using Collections.naturalOrder() which doesn't exist
3. Consider the following Java code snippet for adding numbers to two heaps and finding the median:
MedianFinder mf = new MedianFinder();
mf.addNum(1);
mf.addNum(5);
mf.addNum(2);
System.out.println(mf.findMedian());

Assuming the MedianFinder class uses two heaps correctly, what will be the printed output?
medium
A. 2.5
B. 2
C. 3
D. 1

Solution

  1. Step 1: Add numbers and balance heaps

    Numbers added: 1, 5, 2. Sorted order: 1, 2, 5. Median is middle number 2.
  2. Step 2: Calculate median

    Since odd count, median is the root of the heap with one extra element, which is 2.
  3. Final Answer:

    2 -> Option B
  4. Quick Check:

    Median of [1,2,5] is 2 [OK]
Hint: Median of odd count is middle element [OK]
Common Mistakes:
  • Calculating average instead of middle for odd count
  • Ignoring heap balancing
  • Confusing median with mean
4. The following Java method is part of a MedianFinder class using two heaps. It is supposed to add a number and rebalance heaps. Identify the bug:
public void addNum(int num) {
    if (maxHeap.isEmpty() || num <= maxHeap.peek()) {
        maxHeap.add(num);
    } else {
        minHeap.add(num);
    }
    if (maxHeap.size() > minHeap.size() + 1) {
        minHeap.add(maxHeap.poll());
    } else if (minHeap.size() > maxHeap.size()) {
        maxHeap.add(minHeap.poll());
    }
}
medium
A. Should check if maxHeap is empty before peek() to avoid NullPointerException
B. The addNum method should not add to minHeap when num equals maxHeap.peek()
C. The rebalance condition for minHeap size is incorrect; should be minHeap.size() > maxHeap.size() + 1
D. No bug, method works correctly

Solution

  1. Step 1: Analyze addNum logic

    It adds to maxHeap if empty or num <= maxHeap.peek(), else to minHeap.
  2. Step 2: Check rebalance conditions

    Rebalances if maxHeap is bigger by more than 1 or minHeap bigger than maxHeap.
  3. Final Answer:

    No bug, method works correctly -> Option D
  4. Quick Check:

    Correct heap balancing logic [OK]
Hint: Check heap sizes differ by at most one [OK]
Common Mistakes:
  • Forgetting to check maxHeap empty before peek
  • Incorrect rebalance size conditions
  • Misplacing elements between heaps
5. You want to extend the MedianFinder class to handle a large data stream efficiently. Which approach improves performance when finding the median after every insertion?
hard
A. Use two balanced heaps to keep halves and rebalance after each insertion
B. Store all numbers in a list and sort it after each insertion
C. Use a single max heap to store all numbers
D. Use a hash map to count frequencies and calculate median from counts

Solution

  1. Step 1: Evaluate approaches for median calculation

    Sorting after each insertion (Store all numbers in a list and sort it after each insertion) is costly (O(n log n)). Single heap or hash map do not support quick median.
  2. Step 2: Explain two heaps efficiency

    Two heaps keep halves balanced, allowing O(log n) insertion and O(1) median retrieval.
  3. Final Answer:

    Use two balanced heaps to keep halves and rebalance after each insertion -> Option A
  4. Quick Check:

    Two heaps optimize median in data stream [OK]
Hint: Two heaps give fast median updates in streams [OK]
Common Mistakes:
  • Sorting entire list each time
  • Using single heap only
  • Ignoring insertion cost
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard