1. 程式人生 > >劍指offer 63. 資料流中的中位數

劍指offer 63. 資料流中的中位數

題目描述

如何得到一個數據流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取資料流,使用GetMedian()方法獲取當前讀取資料的中位數。

思路:

這道題沒什麼難度,省點事,直接呼叫python list的.sort()方法,依據len(num)是奇數還是偶數來輸出中位數;

參考答案:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.input_list = []
    def Insert(self, num):
        # write code here
        self.input_list.append(num)
        self.input_list.sort()
    def GetMedian(self, M):
        # write code here
        length = len(self.input_list)
        if length % 2 == 0:
            mid = (self.input_list[length//2] + self.input_list[length//2-1])/2.0
        else:
            mid = self.input_list[length//2]
        return mid

Note

  • 本道題自己開始一直誤以為直接使用sorted(self.input_list)就完成了對self.input_list的排序,實際上是錯誤的,sorted()方法不會對原list進行操作,排序結果需要賦值儲存,只有list.sort()是直接在list上進行排序,無須賦值儲存!