|
35 | 35 | You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.
|
36 | 36 | */
|
37 | 37 | public class _480 {
|
38 |
| - |
39 |
| - /**You cannot simply use minus sign '-' to denote the descending order, because e.g. 3 and -3 might both exist in this array, |
40 |
| - * so we'll have to use the original numbers themselves to store in the heaps.*/ |
41 |
| - private PriorityQueue<Integer> minHeap = new PriorityQueue<>(); |
42 |
| - private PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); |
43 |
| - |
44 |
| - public double[] medianSlidingWindow(int[] nums, int k) { |
45 |
| - int n = nums.length - k + 1; |
46 |
| - if (n <= 0) { |
47 |
| - return new double[0]; |
48 |
| - } |
49 |
| - double[] result = new double[n]; |
50 |
| - |
51 |
| - for (int i = 0; i <= nums.length; i++) { |
52 |
| - if (i >= k) { |
53 |
| - result[i - k] = getMedian(); |
54 |
| - remove(nums[i - k]); |
| 38 | + public static class Solution1 { |
| 39 | + |
| 40 | + /** |
| 41 | + * You cannot simply use minus sign '-' to denote the descending order, because e.g. 3 and -3 might both exist in this array, |
| 42 | + * so we'll have to use the original numbers themselves to store in the heaps. |
| 43 | + */ |
| 44 | + private PriorityQueue<Integer> minHeap = new PriorityQueue<>(); |
| 45 | + private PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); |
| 46 | + |
| 47 | + public double[] medianSlidingWindow(int[] nums, int k) { |
| 48 | + int n = nums.length - k + 1; |
| 49 | + if (n <= 0) { |
| 50 | + return new double[0]; |
55 | 51 | }
|
56 |
| - if (i < nums.length) { |
57 |
| - add(nums[i]); |
| 52 | + double[] result = new double[n]; |
| 53 | + |
| 54 | + for (int i = 0; i <= nums.length; i++) { |
| 55 | + if (i >= k) { |
| 56 | + result[i - k] = getMedian(); |
| 57 | + remove(nums[i - k]); |
| 58 | + } |
| 59 | + if (i < nums.length) { |
| 60 | + add(nums[i]); |
| 61 | + } |
58 | 62 | }
|
59 |
| - } |
60 | 63 |
|
61 |
| - return result; |
62 |
| - } |
63 |
| - |
64 |
| - private double getMedian() { |
65 |
| - if (maxHeap.isEmpty() && minHeap.isEmpty()) { |
66 |
| - return 0; |
| 64 | + return result; |
67 | 65 | }
|
68 | 66 |
|
69 |
| - if (maxHeap.size() == minHeap.size()) { |
70 |
| - return ((double)maxHeap.peek() + (double)minHeap.peek()) / 2.0; |
71 |
| - } else { |
72 |
| - return (double)minHeap.peek(); |
73 |
| - } |
74 |
| - } |
| 67 | + private double getMedian() { |
| 68 | + if (maxHeap.isEmpty() && minHeap.isEmpty()) { |
| 69 | + return 0; |
| 70 | + } |
75 | 71 |
|
76 |
| - private void remove(int num) { |
77 |
| - if (num < getMedian()) { |
78 |
| - maxHeap.remove(num); |
79 |
| - } else { |
80 |
| - minHeap.remove(num); |
81 |
| - } |
82 |
| - if (maxHeap.size() > minHeap.size()) { |
83 |
| - minHeap.add(maxHeap.poll()); |
84 |
| - } |
85 |
| - if (minHeap.size() - maxHeap.size() > 1) { |
86 |
| - maxHeap.add(minHeap.poll()); |
| 72 | + if (maxHeap.size() == minHeap.size()) { |
| 73 | + return ((double) maxHeap.peek() + (double) minHeap.peek()) / 2.0; |
| 74 | + } else { |
| 75 | + return (double) minHeap.peek(); |
| 76 | + } |
87 | 77 | }
|
88 |
| - } |
89 | 78 |
|
90 |
| - private void add(int num) { |
91 |
| - if (num < getMedian()) { |
92 |
| - maxHeap.add(num); |
93 |
| - } else { |
94 |
| - minHeap.add(num); |
95 |
| - } |
96 |
| - if (maxHeap.size() > minHeap.size()) { |
97 |
| - minHeap.add(maxHeap.poll()); |
| 79 | + private void remove(int num) { |
| 80 | + if (num < getMedian()) { |
| 81 | + maxHeap.remove(num); |
| 82 | + } else { |
| 83 | + minHeap.remove(num); |
| 84 | + } |
| 85 | + if (maxHeap.size() > minHeap.size()) { |
| 86 | + minHeap.add(maxHeap.poll()); |
| 87 | + } |
| 88 | + if (minHeap.size() - maxHeap.size() > 1) { |
| 89 | + maxHeap.add(minHeap.poll()); |
| 90 | + } |
98 | 91 | }
|
99 |
| - if (minHeap.size() - maxHeap.size() > 1) { |
100 |
| - maxHeap.add(minHeap.poll()); |
| 92 | + |
| 93 | + private void add(int num) { |
| 94 | + if (num < getMedian()) { |
| 95 | + maxHeap.add(num); |
| 96 | + } else { |
| 97 | + minHeap.add(num); |
| 98 | + } |
| 99 | + if (maxHeap.size() > minHeap.size()) { |
| 100 | + minHeap.add(maxHeap.poll()); |
| 101 | + } |
| 102 | + if (minHeap.size() - maxHeap.size() > 1) { |
| 103 | + maxHeap.add(minHeap.poll()); |
| 104 | + } |
101 | 105 | }
|
102 | 106 | }
|
103 | 107 |
|
|
0 commit comments