The One day 中位數的計算

"""
中位數是有序列表中間的數。若是列表長度是偶數,中位數則是中間兩個數的平均值。

例如,

[2,3,4] 的中位數是 3

[2,3] 的中位數是 (2 + 3) / 2 = 2.5

設計一個支持如下兩種操做的數據結構:

void addNum(int num) - 從數據流中添加一個整數到數據結構中。
double findMedian() - 返回目前全部元素的中位數。

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/find-median-from-data-stream
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
"""
"""
author :jiyanjiao
date : 2019-10-21
"""


class MedianFinder:
    nuber_list = []
    sum = 0
    
    def __init__(self):
        """
        initialize your data structure here.
        """
       
    def addNum(self, num: int) -> None:
        self.nuber_list.append(num)
      
    def findMedian(self) -> float:
        nb = self.nuber_list
        oder_list = []
        le = len(nb)
        if le <=1:
            raise Exception("中位數至少須要兩位數")
        for i in range(0, le):
            for j in range(i+1, le):
                if nb[j] < nb[i]:
                    tmp = nb[i]
                    nb[i] = nb[j]
                    nb[j] = tmp
            oder_list.append(nb[i])
            print(nb[i])
            i += 1
        oder_le = len(oder_list)
        if oder_le % 2 == 0:
            m1 = (oder_list[int(oder_le/2)]+oder_list[int(oder_le/2)-1])/2
        else:
            m1 = oder_list[int(oder_le/2)]
        print(m1)
        return m1


# Your MedianFinder object will be instantiated and called as such:
if __name__ == '__main__':
    
    obj = MedianFinder()
    obj.addNum(1)
    obj.addNum(2)
    obj.addNum(4)
    obj.addNum(3)
    obj.addNum(5)
    param_2 = obj.findMedian()
    
相關文章
相關標籤/搜索