JZ63-数据流中的中位数
数据流中的中位数
https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
class Solution { PriorityQueue<Integer> left = new PriorityQueue<>((o1, o2) -> o2 - o1); PriorityQueue<Integer> right = new PriorityQueue<>(); int N = 0; public void Insert(Integer num) { /** * N 为偶数的情况下插入到右半边。 * 因为右半边元素都要大于左半边,但是新插入的元素不一定比左半边元素来的大, * 因此需要先将元素插入左半边,然后利用左半边为大顶堆的特点,取出堆顶元素即为最大元素,此时插入右半边 * 就是把新插入元素和左堆比较,然后选出新的最大者插入右堆。 **/ if (N % 2 == 0) { left.add(num); right.add(left.poll()); } else { right.add(num); left.add(right.poll()); } N++; } public Double GetMedian() { if (N % 2 == 0) { return (left.peek() + right.peek()) / 2.0; } else { return (double) right.peek(); } } }