Problem
Return the second largest distinct value in the list. Repeated values count once.
Implement second_largest(numbers).
Input
numbers: A list of non-negative integers.
Output
Return the second largest distinct value, or -1 if it doesn't exist.
Einschränkungen
0 ≤ length ≤ 100,000; 0 ≤ each value ≤ 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
Distinct values are 9, 7, 4; the second largest is 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
Only one distinct value exists, so the answer is -1.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
You need the largest and the next different value, not just the top two positions.
Hinweis 2
Track two distinct maxima as you scan, updating them when a new value fits above or between them.
Hinweis 3
If no second distinct value ever appears, return the special fallback value.
Erwartete Komplexität
O(n) time, O(1) extra space
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.