Problema
Retorne o segundo maior valor distinto na lista. Valores repetidos contam apenas uma vez.
Implemente second_largest(numbers).
Entrada
numbers: Uma lista de inteiros não negativos.
Saída
Retorne o segundo maior valor distinto, ou -1 se não existir.
Restrições
0 ≤ tamanho ≤ 100.000; 0 ≤ cada valor ≤ 10⁹
Exemplos
Entrada:
numbers = [4, 9, 7, 9]
Saída esperada:
expected = 7
Entrada:
std::vector<long long> numbers = {4, 9, 7, 9};
Saída esperada:
long long expected = 7;
Entrada:
long[] numbers = new long[] {4, 9, 7, 9};
Saída esperada:
long expected = 7;
Explicação
Os valores distintos são 9, 7, 4; o segundo maior é 7.
Entrada:
numbers = [5, 5]
Saída esperada:
expected = -1
Entrada:
std::vector<long long> numbers = {5, 5};
Saída esperada:
long long expected = -1;
Entrada:
long[] numbers = new long[] {5, 5};
Saída esperada:
long expected = -1;
Explicação
Existe apenas um valor distinto, então a resposta é -1.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Você precisa do maior e do próximo valor diferente, não só das duas primeiras posições.
Dica 2
Acompanhe dois máximos distintos enquanto percorre a lista, atualizando-os quando um novo valor entrar acima ou entre eles.
Dica 3
Se nenhum segundo valor distinto aparecer, retorne o valor de fallback especial.
Complexidade esperada
tempo O(n), espaço extra O(1)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.