Menu
CoddyTech

Find Median from Data Stream

DifficileTaspython iconjava iconcpp iconc iconjs icon+10

Conçois une structure dotée de deux opérations : addNum stocke un entier, et findMedian renvoie la médiane de toutes les valeurs stockées jusqu'à présent. Pour un nombre impair de valeurs, la médiane est la valeur du milieu ; pour un nombre pair, c'est la moyenne des deux valeurs du milieu.

L'opération i est ops[i], et values[i] contient le nombre pour une opération addNum et 0 pour une opération findMedian. Exécute-les dans l'ordre sur une structure vide et renvoie une chaîne pour chaque opération : "null" pour addNum, la médiane pour findMedian. Écris la médiane sous la forme "3", "2.5" ou "-0.5" : sans point décimal pour un nombre entier, et zéro sous la forme "0", jamais "-0".

Fonction

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
les opérations, dans l’ordre où elles sont exécutées
valuesinteger-array
le nombre pour chaque addNum, 0 pour chaque findMedian
Renvoiestring-array
une réponse par opération, sous forme de texte

Contraintes

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • Chaque ops[i] est addNum ou findMedian.
  • -105 ≤ values[i] ≤ 105 pour addNum, et values[i] == 0 pour findMedian.
  • findMedian est appelé uniquement après au moins un addNum.

Exemples

Entrée
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
Sortie
["null", "5", "null", "3", "null", "5", "null", "4"]
Explication
Avec 1 et 5, la médiane est (1 + 5) / 2 = 3. Avec 1, 5 et 8, elle est 5, et avec 1, 3, 5 et 8, elle est (3 + 5) / 2 = 4.
challenge icon

Pour aller plus loin

Si chaque valeur était comprise entre 0 et 100, comment pourrais-tu faire en sorte que les deux opérations s’exécutent en temps constant ?

Réinitialiser le code
def medianStreamOps(ops, values):
    # Écrivez le code ici

Test #1

Test #2

Arguments

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

Résultat attendu

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