《剑指offer》数据流中的中位数
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》数据流中的中位数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那么中位數就是所有數值排序之后位于中間的數值。如果從數據流中讀出偶數個數值,那么中位數就是所有數值排序之后中間兩個數的平均值。
解析:由于數據是動態的添加的,不用移除,所以用list存儲添加進去的數值。關鍵點是在獲取數據流中的中位數。
注意:需要先給list排序
判斷list里面的數值的個數的奇偶性。如果是list的大小是奇數,例如里面存儲的是1 2 3 4 5,那么中位數就是3,直接list.size()/2后得到的就是中位數的下角標了。如果list的大小是偶數,例如里面存儲的是1 2 3 4。顯然中位數就是 (2 + 3)/2,那么如何求得2、3?就是list.size()-1后再除以2就得到數值2的下角標了,然后list.size()/2得到3的角標了。然后你就可以干你想干的了。
import java.util.ArrayList; import java.util.List; import java.util.Collections; public class Solution {List<Integer> list = new ArrayList<>();public void Insert(Integer num) {list.add(num);}public Double GetMedian() {Collections.sort(list);Double result=null;if(list.size()%2!=0){//奇數個數字 1 2 3 4 5result= Double.valueOf(list.get(list.size()/2));}else {//偶數個數字 1 2 3 4result=(Double.valueOf(list.get((list.size()-1)/2))+Double.valueOf(list.get(list.size()/2)))/2;}return result;}}總結
以上是生活随笔為你收集整理的《剑指offer》数据流中的中位数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把十进制转为二进制到16进制
- 下一篇: 奇偶位交换