Problema
Ordena los valores en orden ascendente. Si la cantidad de valores es impar, toma el valor central. Si es par, toma la media aritmética de los dos valores centrales. Este desafío solo acepta listas no vacías.
Implementa median_number(numbers).
Entrada
numbers: La lista no vacía de valores.
Salida
Devuelve la mediana como un número; puede terminar en .5.
Restricciones
1 ≤ longitud de la lista ≤ 100,000. Cada valor es un entero entre −1,000,000,000 y 1,000,000,000.
Ejemplos
Entrada:
numbers = [2, 8, 4, 10]
Salida esperada:
expected = 6.0
Entrada:
std::vector<long long> numbers = {2, 8, 4, 10};
Salida esperada:
double expected = 6.0;
Entrada:
long[] numbers = new long[] {2, 8, 4, 10};
Salida esperada:
double expected = 6.0;
Explicación
El orden ascendente es 2, 4, 8, 10. El par central promedia (4 + 8) / 2 = 6.
Entrada:
numbers = [9, 1, 4]
Salida esperada:
expected = 4.0
Entrada:
std::vector<long long> numbers = {9, 1, 4};
Salida esperada:
double expected = 4.0;
Entrada:
long[] numbers = new long[] {9, 1, 4};
Salida esperada:
double expected = 4.0;
Explicación
El orden ascendente es 1, 4, 9, cuyo valor central es 4.
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
La mediana depende del orden ordenado, así que importan las posiciones en la lista ordenada.
Pista 2
Después de ordenar, usa el elemento central para longitudes impares, o combina los dos elementos centrales para longitudes pares.
Pista 3
Ten cuidado al preservar las mitades al promediar los dos valores centrales, porque la respuesta puede terminar en .5.
Complejidad esperada
tiempo O(n log n), espacio extra O(n)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.