中央値(バイナリサーチ)はインタビューの質問41.提供のデータ・ストリームを獲得します

タイトル説明

データ・ストリームの中央値を取得する方法?数値が奇数データストリームから読み込まれた場合、中央値は、ソート後のすべての値の中央に位置しています。偶数値は、データストリームから読み出された場合、中央値は、注文の全ての中間値の後に2つの数の平均値です。
例えば、
[2,3,4]の中央値は3である
[2,3]中央値は(2 + 3)/ 2 = 2.5
:2つの操作をサポートするためのデータ構造の設計
ボイドaddNum(NUMのINT ) -データ構造にデータストリームから整数を加えます。
ダブルfindMedian() -すべての要素の現在の中央値を返します。

ここに画像を挿入説明

思考

リンクを参照してください。

コード

class MedianFinder:
	def __init__(self):
		self.store = []
	def addNum(self, num:int)->None:
		if not self.store:
			self.store.append(num)
		else:
			bisect.insort_left(self.store,num)
	def findMedian(self)->float:
		n = len(self.store)
		if n & 1 == 1:
			return self.store[n//2]
		else:
			return (self.store[n//2] + self.store[n//2]-1)/2

# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()
彼は198元の記事を発表 ウォンの賞賛566 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_37763870/article/details/105336670