[关闭]
@ysner 2021-10-26T13:28:26.000000Z 字数 618 阅读 833

LeetCode295—数据流的中位数


第一次提交的代码:(堆)

  1. class MedianFinder
  2. {
  3. Queue<Integer> maxHeap,minHeap;
  4. public MedianFinder()
  5. {
  6. maxHeap=new PriorityQueue<>((a,b)->b-a);//((a,b)->b-a)为转大根堆操作
  7. minHeap=new PriorityQueue<>();//优先队列默认小根堆
  8. }
  9. public void addNum(int num)
  10. {
  11. if(maxHeap.size()==minHeap.size())
  12. //此时默认让大根堆多一个数(即中位数)。但是考虑到num过大的情况,先把其加进小根堆,再取小根堆中最小数加入大根堆
  13. {
  14. minHeap.offer(num);//offer优先队列常用入队函数
  15. maxHeap.offer(minHeap.poll());//poll优先队列常用出队函数
  16. }
  17. else
  18. //此时情况是大根堆比小根堆多一个数。则让小根堆多一个数以保证两堆平衡,中位数只在堆顶取
  19. {
  20. maxHeap.offer(num);
  21. minHeap.offer(maxHeap.poll());
  22. }
  23. }
  24. public double findMedian()
  25. {
  26. return maxHeap.size()==minHeap.size()?(maxHeap.peek()+minHeap.peek())/2.0:maxHeap.peek();
  27. }
  28. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注