17 Feb 2025PythonHard

Sliding Window Median

find median for each sliding window using sorted list to maintain window in sorted order.

use SortedList to maintain window in sorted order. initialize with first k elements. for each new element, remove leftmost (nums[i-k]) and add new element (nums[i]). calculate median from sorted list.

median calculation: if k is odd, return middle element. if k is even, return average of two middle elements. SortedList provides O(log k) insert/remove operations.

approach

  • initialize SortedList with first k elements
  • calculate median for initial window
  • for each new element: remove old, add new, recalculate median
  • SortedList maintains order automatically

complexity

O(n log k) time where n is array length and k is window size. O(k) space for sorted list.

Solution files

Pythonsliding-window-median/solution.py
from sortedcontainers import SortedList

class Solution:
    def medianSlidingWindow(self, nums: List[int], k: int) -> List[float]:
        result = []
        window = SortedList(nums[:k])
        n = len(nums)
        
        def median(window):
            if k % class="syntax-number">2 == class="syntax-number">0:
                return (window[k class=class="syntax-string">"syntax-comment">// class="syntax-number">2 - class="syntax-number">1] + window[k // class="syntax-number">2]) / class="syntax-number">2
            else:
                return window[k class=class="syntax-string">"syntax-comment">// class="syntax-number">2]
        
        result.append(median(window))
        
        for i in range(k, n):
            window.remove(nums[i - k])
            window.add(nums[i])
            result.append(median(window))
        
        return result