Menu
CoddyTech

Find Median from Data Stream

İki işlem içeren bir yapı tasarlayın: addNum bir tam sayı depolar ve findMedian şimdiye kadar depolanan tüm değerlerin medyanını döndürür. Tek sayıda değer varsa medyan ortadaki değerdir; çift sayıda değer varsa ortadaki iki değerin ortalamasıdır.

i işlemi ops[i] şeklindedir; addNum için sayıyı values[i], findMedian için ise 0 içerir. İşlemleri boş bir yapı üzerinde sırasıyla çalıştırın ve her işlem için bir dize döndürün: addNum için "null", findMedian için medyan. Medyanı "3", "2.5" veya "-0.5" biçiminde yazın: tam sayıysa ondalık nokta kullanmayın; sıfır için "0" yazın, asla "-0" yazmayın.

Fonksiyon

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
işlemler, çalıştırıldıkları sırayla
valuesinteger-array
her addNum için sayı, her findMedian için 0
Döndürürstring-array
işlem başına metin olarak bir yanıt

Kısıtlar

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • Her ops[i], addNum veya findMedian olur.
  • -105 ≤ values[i] ≤ 105 addNum için ve values[i] == 0 findMedian için.
  • findMedian yalnızca en az bir addNum çağrıldıktan sonra çağrılır.

Örnekler

Girdi
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
Çıktı
["null", "5", "null", "3", "null", "5", "null", "4"]
Açıklama
1 ve 5 için medyan (1 + 5) / 2 = 3'tür. 1, 5 ve 8 için medyan 5'tir; 1, 3, 5 ve 8 için ise (3 + 5) / 2 = 4'tür.
challenge icon

Ek soru

Her değer 0 ile 100 arasında olsaydı, her iki işlemin de sabit zamanda çalışmasını nasıl sağlayabilirdin?

Kodu sıfırla
def medianStreamOps(ops, values):
    # Kodu buraya yazın

Test #1

Test #2

Argümanlar

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

Beklenen Çıktı

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