Practice/Google/Leetcode 1825. Finding MK Average
CodingMust
Design a data structure that processes a continuous stream of integers and supports two operations:
The data structure maintains a sliding window of the most recent m elements. When calculating the average, you must:
The key challenge is maintaining efficient access to sorted statistics over a moving window as new elements arrive and old elements are evicted.
Example 1:
` Operations: MKAverage obj = new MKAverage(3, 1) obj.addElement(3) obj.addElement(1) obj.addElement(10) obj.calculateMKAverage() // returns 3
Explanation: Window contains [3, 1, 10] After sorting: [1, 3, 10] Remove 1 smallest (1) and 1 largest (10) Remaining: [3] Average: 3 // 1 = 3 `
Example 2:
` Operations: MKAverage obj = new MKAverage(6, 2) obj.addElement(3) obj.addElement(1) obj.calculateMKAverage() // returns -1
Explanation: Only 2 elements added, but m=6 requires at least 6 elements `
Example 3:
` Operations: MKAverage obj = new MKAverage(6, 2) obj.addElement(3) obj.addElement(1) obj.addElement(10) obj.addElement(5) obj.addElement(5) obj.addElement(5) obj.calculateMKAverage() // returns 5 obj.addElement(8) obj.calculateMKAverage() // returns 5
Explanation: First query: Window [3,1,10,5,5,5], sorted [1,3,5,5,5,10] Remove 2 smallest (1,3) and 2 largest (5,10): middle [5,5] Average: 10 // 2 = 5
Second query: Window [1,10,5,5,5,8], sorted [1,5,5,5,8,10]
Remove 2 smallest (1,5) and 2 largest (8,10): middle [5,5]
Average: 10 // 2 = 5
`