Retour aux défis
Facile 0 résolus 0 % de réussite

Deuxième plus grande valeur

Trouver la deuxième plus grande valeur distincte.

Ce que vous allez apprendre

  • Suivre les deux plus grandes valeurs en un passage
  • Ignorer les doublons du maximum
  • Gérer les listes sans seconde valeur

Problème

Retournez la deuxième plus grande valeur distincte de la liste. Les valeurs répétées ne comptent qu'une seule fois.

Implémentez second_largest(numbers).

Entrée

numbers : Une liste d'entiers non négatifs.

Sortie

Retournez la deuxième plus grande valeur distincte, ou -1 si elle n'existe pas.

Contraintes

0 ≤ longueur ≤ 100 000 ; 0 ≤ chaque valeur ≤ 10⁹

Exemples

Exemple 1
Entrée :
numbers = [4, 9, 7, 9]

Sortie attendue :
expected = 7
Entrée :
std::vector<long long> numbers = {4, 9, 7, 9};

Sortie attendue :
long long expected = 7;
Entrée :
long[] numbers = new long[] {4, 9, 7, 9};

Sortie attendue :
long expected = 7;

Explication

Les valeurs distinctes sont 9, 7, 4 ; la deuxième plus grande est 7.

Exemple 2
Entrée :
numbers = [5, 5]

Sortie attendue :
expected = -1
Entrée :
std::vector<long long> numbers = {5, 5};

Sortie attendue :
long long expected = -1;
Entrée :
long[] numbers = new long[] {5, 5};

Sortie attendue :
long expected = -1;

Explication

Il n'existe qu'une seule valeur distincte, donc la réponse est -1.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Il vous faut la plus grande valeur et la suivante différente, pas seulement les deux premières positions.

Indice 2

Suivez deux maxima distincts en parcourant la liste, en les mettant à jour quand une nouvelle valeur se place au-dessus ou entre eux.

Indice 3

Si aucune deuxième valeur distincte n’apparaît, retournez la valeur de secours spéciale.

Complexité attendue

temps O(n), espace supplémentaire O(1)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.