Problem
Gib den zweitgrößten eindeutigen Wert in der Liste zurück. Wiederholte Werte zählen nur einmal.
Implementiere second_largest(numbers).
Eingabe
numbers: Eine Liste von nicht-negativen Ganzzahlen.
Ausgabe
Gib den zweitgrößten eindeutigen Wert zurück, oder -1, falls dieser nicht existiert.
Einschränkungen
0 ≤ Länge ≤ 100.000; 0 ≤ jeder Wert ≤ 10⁹
Beispiele
Eingabe:
numbers = [4, 9, 7, 9]
Erwartete Ausgabe:
expected = 7
Eingabe:
std::vector<long long> numbers = {4, 9, 7, 9};
Erwartete Ausgabe:
long long expected = 7;
Eingabe:
long[] numbers = new long[] {4, 9, 7, 9};
Erwartete Ausgabe:
long expected = 7;
Erläuterung
Eindeutige Werte sind 9, 7, 4; der zweitgrößte ist 7.
Eingabe:
numbers = [5, 5]
Erwartete Ausgabe:
expected = -1
Eingabe:
std::vector<long long> numbers = {5, 5};
Erwartete Ausgabe:
long long expected = -1;
Eingabe:
long[] numbers = new long[] {5, 5};
Erwartete Ausgabe:
long expected = -1;
Erläuterung
Es existiert nur ein eindeutiger Wert, daher ist die Antwort -1.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Du brauchst den größten und den nächstgrößeren unterschiedlichen Wert, nicht nur die ersten zwei Positionen.
Hinweis 2
Verfolge zwei verschiedene Maxima beim Durchlaufen und aktualisiere sie, wenn ein neuer Wert darüber oder dazwischen passt.
Hinweis 3
Wenn nie ein zweiter unterschiedlicher Wert auftaucht, gib den speziellen Fallback-Wert zurück.
Erwartete Komplexität
Zeit O(n), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.