Menu
CoddyTech

Find Median from Data Stream

DifficileHeappython iconjava iconcpp iconc iconjs icon+10

Progetta una struttura con due operazioni: addNum memorizza un numero intero e findMedian restituisce la mediana di tutti i valori memorizzati fino a quel momento. La mediana di un numero dispari di valori è il valore centrale; per un numero pari è la media dei due valori centrali.

L’operazione i è ops[i], con values[i] che contiene il numero per un’operazione addNum e 0 per un’operazione findMedian. Esegui le operazioni in ordine su una struttura vuota e restituisci una stringa per ciascuna: "null" per addNum, la mediana per findMedian. Scrivi la mediana come "3", "2.5" o "-0.5": nessun separatore decimale per un numero intero e zero come "0", mai "-0".

Funzione

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
le operazioni, nell'ordine in cui vengono eseguite
valuesinteger-array
il numero per ogni addNum, 0 per ogni findMedian
Restituiscestring-array
una risposta per operazione, sotto forma di testo

Vincoli

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • Ogni ops[i] è addNum o findMedian.
  • -105 ≤ values[i] ≤ 105 per addNum e values[i] == 0 per findMedian.
  • findMedian viene chiamata solo dopo almeno una addNum.

Esempi

Input
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
Output
["null", "5", "null", "3", "null", "5", "null", "4"]
Spiegazione
Con 1 e 5 la mediana è (1 + 5) / 2 = 3. Con 1, 5 e 8 è 5, e con 1, 3, 5 e 8 è (3 + 5) / 2 = 4.
challenge icon

Per approfondire

Se ogni valore fosse compreso tra 0 e 100, come potresti fare in modo che entrambe le operazioni vengano eseguite in tempo costante?

Ripristina il codice
def medianStreamOps(ops, values):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

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

Output atteso

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