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 arraya
.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
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;
}
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)