Einfach 0 gelöst 0% Erfolgsquote

Zweitgrößter Wert

Finde den zweitgrößten eindeutigen Wert.

Das lernst du

  • Die zwei größten Werte in einem Durchlauf verfolgen
  • Duplikate des Maximums ignorieren
  • Listen ohne zweiten Wert behandeln

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

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

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

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.