DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Escolhendo números.

Olá, seja bem vindo a mais uma etapa do Resolvendo problemas no Hacker-Rank,nessa sessão iremos resolver uma série de arrays. Nosso objetivo é retornar um input onde dentro de um parâmetro retornará diversos outros arrays menores e a subtração entre eles seja maior que 1.

Picking Numbers -

As regras para esse problema são as seguintes:

  • A primeira linha contém um único inteiro n, o tamanho do array a.

  • A segunda linha contém números inteiros separados por espaços, cada um com a[i] .

Vejamos um exemplo:

6
4 6 5 3 3 1

input: 3
Enter fullscreen mode Exit fullscreen mode

Foi escolhido o array pegando [4,3,3], a subtração de pares: 4-3 e 3-3 dão respectivamente 1 e 0. Então imprimimos o valor escolhido.

Vejamos como resolver esse caso:

function pickingNumbers(a) {
    // Write your code here
  a.sort((a, b) => a - b);
    let counter = 0;
    let tmpCounter = 0;
    let maxSubSum = 0;
    for (let i = 0; i < a.length; i++) {
        if (a[i] != a[i - 1]) {
            if (a[i] == a[i - 1] + 1) {
                tmpCounter = counter;
                counter = 0;
            }
            else{
                tmpCounter = 0;
                counter = 0;
            }
        }
        counter++;
        if (tmpCounter + counter > maxSubSum) {
            maxSubSum = tmpCounter + counter
        }
    }
    return maxSubSum;
}
Enter fullscreen mode Exit fullscreen mode

Este código implementa a função "pickingNumbers", que recebe um array "a" de inteiros e retorna a maior quantidade de elementos do array que podem ser selecionados, de modo que a diferença absoluta entre quaisquer dois elementos selecionados seja no máximo 1.

O código começa ordenando o array "a" em ordem crescente usando a função de ordenação "sort". Em seguida, são definidas três variáveis: "counter", "tmpCounter" e "maxSubSum".

O loop for percorre o array "a" e conta quantas vezes cada número aparece consecutivamente no array (ou seja, quantos números consecutivos têm uma diferença absoluta de no máximo 1). Se um novo número é encontrado, a variável "counter" é reiniciada e a variável "tmpCounter" é atualizada com o valor anterior de "counter" se o novo número é consecutivo ao número anterior. Se o novo número não é consecutivo, ambas as variáveis "tmpCounter" e "counter" são reiniciadas.

A cada iteração do loop for, é verificado se a soma das variáveis "tmpCounter" e "counter" é maior do que o valor atual da variável "maxSubSum". Se for o caso, o valor de "maxSubSum" é atualizado.

Por fim, a função retorna o valor de "maxSubSum".

Com isso finalizamos mais uma sessão da série: Resolvendo problemas no HackerRank:. Até a próxima

Top comments (0)