1、題目數據結構
一、審題spa
二、分析code
實現一個數據結構,能夠添加整形元素,並能夠返回排序後的中位數。blog
2、解答排序
一、思路it
採用兩個 PriorityQueue。io
①、採用兩個 PriorityQueue,PriorityQueue 具備對元素進行自動排序的功能。class
②、一個爲 maxQueue,記錄比中位數大的全部元素,另外一個爲 smallQueue, 記錄比中位數小的元素。im
③、爲了方便統計數中位數,smallQueue 中存儲的元素爲其負值,這樣,候補中位數就在 smallQueue 的隊頭。統計
④、若元素總數爲奇數,直接返回 largeQueue 的隊頭,若元素爲偶數,返回 largeQueue 的隊頭和 smallQueue 隊頭的負值,兩元素的平均。
public class MedianFinder { /** initialize your data structure here. */ private Queue<Long> small = new PriorityQueue<Long>(); private Queue<Long> large = new PriorityQueue<>(); public void addNum(int num) { large.add((long) num); small.add(-large.poll()); if(large.size() < small.size()) large.add(-small.poll()); } public double findMedian() { if(large.size() > small.size()) return large.peek(); return (large.peek() - small.peek()) / 2.0; } }