日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 數(shù)據(jù)流中的中位數(shù)

數(shù)據(jù)流中的中位數(shù)

來源:程序員人生   發(fā)布時(shí)間:2016-07-13 08:51:20 閱讀次數(shù):2419次

題目

如何得到1個(gè)數(shù)據(jù)流中的中位數(shù)?如果從數(shù)據(jù)流中讀出奇數(shù)個(gè)數(shù)值,那末中位數(shù)就是所有數(shù)值排序以后位于中間的數(shù)值。如果從數(shù)據(jù)流中讀出偶數(shù)個(gè)數(shù)值,那末中位數(shù)就是所有數(shù)值排序以后中間兩個(gè)數(shù)的平均值。

解題

劍指offer上說的很詳細(xì)
1.無序數(shù)組
插入:O(1)
獲得中位數(shù):O(N)

import java.util.*; public class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public void Insert(Integer num) { list.add(num); } public Double GetMedian() { int size = list.size(); Collections.sort(list); if(size%2==1){ return 1.0*list.get(size/2); }else{ return (list.get(size/2) + list.get(size/2-1))/2.0; } } }

2.有序數(shù)組
插入:O(N)
獲得中位數(shù):O(1)

import java.util.*; public class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public void Insert(Integer num) { int i =0; while(i<list.size()){ if(list.get(i)<=num){ i++; }else break; } list.add(-1); int j = list.size() -1; while(j>i){ list.set(j,list.get(j-1)); j--; } list.set(i,num); } public Double GetMedian() { int size = list.size(); if(size%2==1){ return 1.0*list.get(size/2); }else{ return (list.get(size/2) + list.get(size/2-1))/2.0; } } }

3.有序鏈表
插入:O(N)
獲得中位數(shù):O(N)

import java.util.*; public class Solution { LinkedList<Integer> list = new LinkedList<Integer>(); public void Insert(Integer num) { if(list.size() < 1){ list.add(num); return; } int i = 0; while(i<list.size()){ if(list.get(i) <=num) i++; else break; } list.add(i,num); } public Double GetMedian() { if( list.size() < 1 ) return null; if((list.size()&1) == 1){ return list.get(list.size()/2)+0.0; }else{ return (list.get((list.size()-1)/2)+list.get(list.size()/2)+0.0)/2; } } }

LinkedList內(nèi)部實(shí)現(xiàn)就是鏈表,這里獲得中位數(shù)是需要1個(gè)1個(gè)的遍歷鏈表的
劍指offer書上定義兩個(gè)指針指向兩邊中間,太復(fù)雜,省略了

4.最大堆,最小堆
插入:O(log(n))
獲得中位數(shù):O(1)
兩個(gè)堆數(shù)據(jù)之差不超過1
抄的程序
優(yōu)先隊(duì)列,可以模型堆嗎?

import java.util.*; import java.util.Comparator; import java.util.PriorityQueue; public class Solution { int count = 0; private PriorityQueue<Integer> minHeap = new PriorityQueue<>(11, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); private PriorityQueue<Integer> maxHeap = new PriorityQueue<>(11, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); public void Insert(Integer num) { count++; if (count % 2 == 0) { maxHeap.offer(num); int i = maxHeap.poll(); minHeap.offer(i); } else { minHeap.offer(num); int i = minHeap.poll(); maxHeap.offer(i); } } public Double GetMedian() { if (count % 2 == 0) { return (Double.valueOf(maxHeap.peek()) +Double.valueOf( minHeap.peek())) / 2; } else { return Double.valueOf(maxHeap.peek()); } } }

也能夠這樣理解,兩個(gè)數(shù)組,AB,A內(nèi)的元素都比B的小,B內(nèi)的元素都比B的大,A是升序的,B也是升序的
中位數(shù)就是A的最大值和B的最小值的平均值
插入元素時(shí)候,上面程序是根據(jù)插入數(shù)據(jù)的奇數(shù)偶數(shù)順序選擇插入到對應(yīng)的AB中,這樣很好
奇數(shù)時(shí)候插入到A,A最大值插入到B
偶數(shù)時(shí)候插入到B,B最小值插入到A
可以用兩個(gè)排序數(shù)組

其他樹實(shí)現(xiàn)的太復(fù)雜了,省略了

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲免费观看 | 成人福利在线看 | 爱爱免费 | 中文日韩 | 亚洲免费毛片 | 99久33精品字幕 | 久久国产电影 | 国产噜噜噜噜噜久久久久久久久 | 国产毛片在线 | 国产精品99久久久久久动医院 | 久久亚洲一区二区 | 一区二区在线视频观看 | 欧美一区二区在线视频 | 国产成人小视频 | 黄色亚洲片 | 欧美综合视频 | 黄色av网站在线免费观看 | 久久久久久久久久久久久九 | 麻豆乱码国产一区二区三区 | 欧美性网站 | 天天射天天搞 | 最近的中文字幕 | 欧美区在线 | 视频一区二区三区在线 | 国产情侣在线视频 | 91黄色片| 欧美日本三级 | a视频在线免费观看 | 久艹av | 污视频网站在线观看 | 青青草自拍视频 | www在线免费观看欧美黄 | www.xx国产 | 亚洲国产日韩在线 | av片在线观看 | 国产福利电影在线观看 | 午夜激情视频在线 | 久久久久亚洲 | 精品成人一区二区 | 6080午夜 | 国产午夜av |