Volver a los desafíos
Fácil 0 resueltos 0% de aceptación

Segundo valor más grande

Encuentra el segundo valor distinto más grande.

Lo que aprenderás

  • Seguir los dos mayores valores en una pasada
  • Ignorar duplicados del máximo
  • Manejar listas sin segundo valor

Problema

Ver original (inglés)

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

Ejemplo 1
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.

Ejemplo 2
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.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.