Верните второе по величине уникальное значение в списке. Повторяющиеся значения учитываются один раз.
Реализуйте функцию second_largest(numbers).
Входные данные
numbers: Список неотрицательных целых чисел.
Выходные данные
Верните второе по величине уникальное значение, или -1, если такого не существует.
Ограничения
0 ≤ длина ≤ 100 000; 0 ≤ каждое значение ≤ 10⁹
Примеры
Ввод:
numbers = [4, 9, 7, 9]
Ожидаемый вывод:
expected = 7
Ввод:
std::vector<long long> numbers = {4, 9, 7, 9};
Ожидаемый вывод:
long long expected = 7;
Ввод:
long[] numbers = new long[] {4, 9, 7, 9};
Ожидаемый вывод:
long expected = 7;
Пояснение
Уникальные значения: 9, 7, 4; второе по величине — 7.
Ввод:
numbers = [5, 5]
Ожидаемый вывод:
expected = -1
Ввод:
std::vector<long long> numbers = {5, 5};
Ожидаемый вывод:
long long expected = -1;
Ввод:
long[] numbers = new long[] {5, 5};
Ожидаемый вывод:
long expected = -1;
Пояснение
Существует только одно уникальное значение, поэтому ответ — -1.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Нужны наибольшее и следующее различное значение, а не просто две первые позиции.
Подсказка 2
Отслеживайте два разных максимума при проходе и обновляйте их, когда новое значение подходит выше или между ними.
Подсказка 3
Если второе различное значение так и не появилось, верните специальное значение по умолчанию.
Ожидаемая сложность
время O(n), доп. память O(1)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.