LeetCode480

    技术2022-07-27  86

    class Solution { PriorityQueue<Integer> maxHeap = new PriorityQueue<>((Collections.reverseOrder())); PriorityQueue<Integer> minHeap = new PriorityQueue<>(); public double[] medianSlidingWindow(int[] nums, int k) { double[] result = new double[nums.length - k + 1]; for (int i = 0; i < nums.length; i++) { if (maxHeap.size() == 0 || maxHeap.peek() >= nums[i]) { maxHeap.add(nums[i]); } else { minHeap.add(nums[i]); } balanceHeaps(); if (i - k + 1 >= 0) { if (maxHeap.size() == minHeap.size()) { result[i - k + 1] = maxHeap.peek() / 2.0 + minHeap.peek() / 2.0; } else { result[i - k + 1] = maxHeap.peek(); } int elementToBeRemoved = nums[i - k + 1]; if (elementToBeRemoved <= maxHeap.peek()) { maxHeap.remove(elementToBeRemoved); } else { minHeap.remove(elementToBeRemoved); } balanceHeaps(); } } return result; } private void balanceHeaps() { if (maxHeap.size() > minHeap.size() + 1) minHeap.add(maxHeap.poll()); else if (maxHeap.size() < minHeap.size()) maxHeap.add(minHeap.poll()); } }

     

    Processed: 0.010, SQL: 9