Menu
CoddyTech

Find Median from Data Stream

DifícilHeappython iconjava iconcpp iconc iconjs icon+10

Projete uma estrutura com duas operações: addNum armazena um número inteiro, e findMedian retorna a mediana de todos os valores armazenados até então. A mediana de uma quantidade ímpar é o valor do meio; para uma quantidade par, é a média dos dois valores do meio.

A operação i é ops[i], com values[i] contendo o número para um addNum e 0 para um findMedian. Execute-as em ordem em uma estrutura vazia e retorne uma string para cada operação: "null" para addNum, a mediana para findMedian. Escreva a mediana como "3", "2.5" ou "-0.5": sem ponto decimal para um número inteiro, e zero como "0", nunca "-0".

Função

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
as operações, na ordem em que são executadas
valuesinteger-array
o número para cada addNum, 0 para cada findMedian
Retornastring-array
uma resposta por operação, como texto

Restrições

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • Todo ops[i] é addNum ou findMedian.
  • -105 ≤ values[i] ≤ 105 para addNum, e values[i] == 0 para findMedian.
  • findMedian só é chamada depois de pelo menos uma chamada a addNum.

Exemplos

Entrada
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
Saída
["null", "5", "null", "3", "null", "5", "null", "4"]
Explicação
Com 1 e 5, a mediana é (1 + 5) / 2 = 3. Com 1, 5 e 8, ela é 5, e com 1, 3, 5 e 8, é (3 + 5) / 2 = 4.
challenge icon

Para ir além

Se todos os valores estivessem entre 0 e 100, como você poderia fazer ambas as operações serem executadas em tempo constante?

Redefinir código
def medianStreamOps(ops, values):
    # Escreva o código aqui

Teste #1

Teste #2

Argumentos

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

Saída Esperada

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