Problema
Devuelve el segundo valor distinto más grande de la lista. Los valores repetidos cuentan solo una vez.
Implementa second_largest(numbers).
Entrada
numbers: Una lista de enteros no negativos.
Salida
Devuelve el segundo valor distinto más grande, o -1 si no existe.
Restricciones
0 ≤ longitud ≤ 100,000; 0 ≤ cada valor ≤ 10⁹
Ejemplos
Entrada:
numbers = [4, 9, 7, 9]
Salida esperada:
expected = 7
Entrada:
std::vector<long long> numbers = {4, 9, 7, 9};
Salida esperada:
long long expected = 7;
Entrada:
long[] numbers = new long[] {4, 9, 7, 9};
Salida esperada:
long expected = 7;
Explicación
Los valores distintos son 9, 7, 4; el segundo más grande es 7.
Entrada:
numbers = [5, 5]
Salida esperada:
expected = -1
Entrada:
std::vector<long long> numbers = {5, 5};
Salida esperada:
long long expected = -1;
Entrada:
long[] numbers = new long[] {5, 5};
Salida esperada:
long expected = -1;
Explicación
Solo existe un valor distinto, así que la respuesta es -1.
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
Necesitas el mayor y el siguiente valor distinto, no solo las dos primeras posiciones.
Pista 2
Lleva dos máximos distintos mientras recorres la lista, actualizándolos cuando un nuevo valor encaje por encima o entre ellos.
Pista 3
Si nunca aparece un segundo valor distinto, devuelve el valor especial de respaldo.
Complejidad esperada
tiempo O(n), espacio extra O(1)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.