Fácil 0 resolvidos 0% de aceitação

Segundo Maior Valor

Encontre o segundo maior valor distinto.

O que você vai aprender

  • Acompanhar os dois maiores valores em uma passada
  • Ignorar duplicatas do máximo
  • Tratar listas sem segundo valor

Problema

Ver original (inglês)

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

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

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

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.