Search⌘ K
AI Features

Solution: Finding MK Average

Explore how to design a custom data structure that maintains a sliding window of integer streams to compute the MK Average efficiently. Understand how to use a deque and three sorted lists to track lowest, middle, and highest values, and update sums for constant-time average computation. This lesson helps you grasp handling real-time data streams with balanced partitioning and binary search to optimize insertion and deletion operations.

Statement

You are given two integers, m and k, and a stream of integers. Your task is to design and implement a data structure that efficiently calculates the MK Average for the stream.

To compute the MK Average, follow these steps:

  1. Stream length check: If the stream contains fewer than m elements, return -1 as the MK Average.

  2. Window selection: Otherwise, copy the last m elements of the stream to a separate container and remove the smallest k elements and the largest k elements from the container.

  3. Average calculation: Calculate the average of the remaining elements (rounded down to the nearest integer).

Implement the MKAverage class

  • MKAverage(int m, int k): Initializes the object with integers m and k and an empty stream.

  • void addElement(int num): Adds the integer num to the stream.

  • int calculateMKAverage(): Returns the current MK Average for the stream as described above, or -1 if the stream contains fewer than m elements.

Constraints:

  • 3<=3 <= m <=105<= 10^5

  • 1<1 < k*2 ...