295. Find Median from Data Stream
阿新 • • 發佈:2018-11-25
str 一個數 private 元素 用兩個 edi alt all rom
一、題目
1、審題
2、分析
實現一個數據結構,可以添加整形元素,並可以返回排序後的中位數。
二、解答
1、思路
采用兩個 PriorityQueue。
①、采用兩個 PriorityQueue,PriorityQueue 具有對元素進行自動排序的功能。
②、一個為 maxQueue,記錄比中位數大的所有元素,另一個為 smallQueue, 記錄比中位數小的元素。
③、為了方便統計數中位數,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; } }
295. Find Median from Data Stream