Torna alle sfide
Facile 0 risolte 0% di accettazione

Secondo Valore Più Grande

Trova il secondo valore distinto più grande.

Cosa imparerai

  • Tenere traccia dei due valori più grandi in un passaggio
  • Ignorare i duplicati del massimo
  • Gestire liste senza un secondo valore

Problema

Restituisci il secondo valore distinto più grande nella lista. I valori ripetuti contano una sola volta.

Implementa second_largest(numbers).

Input

numbers: Una lista di interi non negativi.

Output

Restituisci il secondo valore distinto più grande, oppure -1 se non esiste.

Vincoli

0 ≤ lunghezza ≤ 100.000; 0 ≤ ogni valore ≤ 10⁹

Esempi

Esempio 1
Input:
numbers = [4, 9, 7, 9]

Output atteso:
expected = 7
Input:
std::vector<long long> numbers = {4, 9, 7, 9};

Output atteso:
long long expected = 7;
Input:
long[] numbers = new long[] {4, 9, 7, 9};

Output atteso:
long expected = 7;

Spiegazione

I valori distinti sono 9, 7, 4; il secondo più grande è 7.

Esempio 2
Input:
numbers = [5, 5]

Output atteso:
expected = -1
Input:
std::vector<long long> numbers = {5, 5};

Output atteso:
long long expected = -1;
Input:
long[] numbers = new long[] {5, 5};

Output atteso:
long expected = -1;

Spiegazione

Esiste un solo valore distinto, quindi la risposta è -1.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Ti servono il massimo e il secondo valore distinto, non solo le prime due posizioni.

Suggerimento 2

Tieni traccia di due massimi distinti mentre scansioni, aggiornandoli quando un nuovo valore si colloca sopra o in mezzo.

Suggerimento 3

Se non compare mai un secondo valore distinto, restituisci il valore di fallback speciale.

Complessità attesa

tempo O(n), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.