Menu
CoddyTech

Find Median from Data Stream

むずかしいヒープpython iconjava iconcpp iconc iconjs icon+10

2つの操作を持つ構造を設計してください。addNumは整数を保存し、findMedianはそれまでに保存されたすべての値の中央値を返します。個数が奇数の場合、中央値は中央の値です。偶数の場合は、中央にある2つの値の平均です。

操作iはops[i]です。values[i]には、addNumの場合は数値が、findMedianの場合は0が入っています。空の構造に対して順番に操作を実行し、それぞれについて文字列を1つ返してください。addNumの場合は"null"、findMedianの場合は中央値を返します。中央値は"3"、"2.5"、"-0.5"のように表記してください。整数の場合は小数点を付けず、ゼロは"0"とし、"-0"にはしないでください。

関数

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
実行される順序での操作
valuesinteger-array
各addNumに対する数値、各findMedianに対しては0
戻り値string-array
操作ごとに1つの回答をテキスト形式で

制約

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • 各ops[i]はaddNumまたはfindMedianです。
  • -105 ≤ values[i] ≤ 105はaddNumの場合、values[i] == 0はfindMedianの場合です。
  • findMedian は、少なくとも 1 回 addNum が呼び出された後にのみ呼び出されます。

例

入力
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
出力
["null", "5", "null", "3", "null", "5", "null", "4"]
説明
1 と 5 の中央値は (1 + 5) / 2 = 3 です。1、5、8 の中央値は 5 で、1、3、5、8 の中央値は (3 + 5) / 2 = 4 です。
challenge icon

発展問題

すべての値が0から100の範囲内だとしたら、両方の操作を定数時間で実行するにはどうすればよいでしょうか?

コードをリセット
def medianStreamOps(ops, values):
    # ここにコードを記述してください

テスト #1

テスト #2

引数

ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]
values = [5, 0, 1, 0, 8, 0, 3, 0]

期待される出力

["null", "5", "null", "3", "null", "5", "null", "4"]