Em Java; Vetor

Quando um vetor e criado e eu vou adicionando elementos tem alguma forma de saber qual a maior diferença de um numero digitado para o outro, ex: 25,55,44,36,99. Nesse exemplo seria do 36 para o 99.

  • Faça um loop no vetor recuperando a diferença entre o elemento atual e o proximo (caso exista)
  • Crie uma variável auxiliar para armazenar a maior diferença
  • No loop, verifique a diferença da variável auxiliar é menor do que a diferença atual calculada. Se for, substitua a diferença da variável auxiliar.

A maior diferença é a diferença entre o maior e o menor valor contidos no array. Eu vou basear minha explicação tomando que a diferença consiste na distância (valor absoluto) entre os dois valores. Por exemplo, -1 e 9 tem 10 de diferença, 3 e -2 tem 5 de diferença. Note que isso não fará diferença no final do ponto de vista da ideia, independente de como você está calculando sua diferença, que provavelmente deve ser array[i-1] - array[i]. Vou dar dois exemplos, um usando a diferença que eu expliquei e a outra usando array[i-1] - array[i].

A estratégia do @Lucas_Camara falha, pois ela leva em consideração apenas números adjacentes, a não ser que uma busca exaustiva seja feita, ou seja, para cada elemento do array varre-se todos os elementos à sua direita. Veja as ideias abaixo:

Diferença como valor absoluto:

Adjacentes:

                     valores do array:   5,  -1,  8,  3,  -6
diferença entre array[i-1] e array[i]:     6    9    5    9

Nessa estratégia obtém-se que a maior diferença é 9 (entre -1 e 8 e entre 3 e -6), entretanto a maior diferença na verdade é 14 (entre 8 e -6). A estratégia de comparar com adjacentes funciona, como eu disse, só se você usar força bruta, comparando todos com todos:

Adjacentes (força bruta):

                             valores do array:  5,    -1,     8,     3,      -6
 diferença entre 5 e os valores à sua direita:     6 (-1), 3 (8), 2 (3), 11 (-6)
diferença entre -1 e os valores à sua direita:             9 (8), 4 (3),  5 (-6)
 diferença entre 8 e os valores à sua direita:                    5 (3), 14 (-6)
 diferença entre 3 e os valores à sua direita:                            9 (-6)

Você só precisa considerar os elementos à direita, pois às combinações mais à esquerda já foram feitas nos passos anteriores.

Agora, levando em conta o que falei lá no início, ou seja, que a maior diferença é a diferença entre o maior e o menor valor:

Busca pelo menor e pelo maior valor:

 valores do array:  5, -1, 8, 3, -6
  array[0]      array[1]      array[2]      array[3]      array[4]
valor = 5    valor = -1    valor =  8    valor =  3    valor = -6
maior = 5    maior =  5    maior =  8    maior =  8    maior =  8
menor = 5    menor = -1    menor = -1    menor = -1    menor = -6

Em uma passada no array você consegue encontrar o menor e o maior valor, ou seja, maior é 8 e o menor é -6. Calcule a diferença dos dois que é 14 e pronto.

Diferença como array[i-1] - array[i]

Adjacentes:

                     valores do array:   5,  3,  5,  2,  -5
diferença entre array[i-1] e array[i]:     2    -2    3    7

Maior diferença encontrada é 7, entretanto a diferença entre 5 e -5 é 10, que de fato é a maior.

Adjacentes (força bruta):

                            valores do array:  5,     3,     5,     2,      -5
diferença entre 5 e os valores à sua direita:      2 (3), 0 (5), 3 (2), 10 (-5)
diferença entre 3 e os valores à sua direita:            -2 (5), 1 (2),  8 (-5)
diferença entre 5 e os valores à sua direita:                    3 (2), 10 (-5)
diferença entre 2 e os valores à sua direita:                            7 (-5)

A maior diferença é 10.

Busca pelo menor e pelo maior valor:

 valores do array:  5, 3, 5, 2, -5
  array[0]     array[1]     array[2]     array[3]      array[4]
valor = 5    valor = 3    valor = 5    valor = 2    valor = -5
maior = 5    maior = 5    maior = 5    maior = 5    maior =  5
menor = 5    menor = 3    menor = 3    menor = 2    menor = -5

A diferença entre o maior e o menor:

maior - menor = 5 - (-5) = 10

Aproveitando, é interessante como um problema simples pode ser, de certa forma, “perigoso”, ou seja, uma solução que as vezes parece ser trivial não funciona para todos os casos. Como exercício, pense se a estratégia do @Lucas_Camara funcionaria para inteiros não negativos, ou seja, para o conjunto dos números naturais.

1 curtida

Baseado no enunciado “alguma forma de saber qual a maior diferença de um numero digitado para o outro” e no exemplo dado (onde a maior diferença é entre 36 e 99 ao invés de entre 25 e 99) eu diria que a estratégia do @Lucas_Camara parece correta.

1 curtida