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()
    

 

posted @ 2019-05-06 10:10  jiyanjiao  阅读(647)  评论(0编辑  收藏  举报