DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Puxando o menor valor de um array

Olá, seja bem vindo a mais uma etapa do Resolvendo problemas no Hacker-Rank,nessa sessão iremos analisar a frequência de pássaros que passaram dentro de um array. Veremos agora!

Migratory Birds -

Dada uma matriz de avistamentos de pássaros em que cada elemento representa um id de tipo de pássaro, determine o id do tipo avistado com mais frequência. Se mais de 1 tipo foi detectado nessa quantidade máxima, retorne o menor de seus ids.

  • Em resumo, existe um array arrque guarda o número de vezes que cada pássaro passou, e devemos pegar o menor valor do número de vezes.

Vejamos um exemplo:

6 // comprimento de arrays no arr
1 4 4 4 5 3 // matrix arr

4 // o num 4 repete mais vezes,como não existe nenhuma repetição maior que ele, e também nenhuma igual que fosse um número menor, o resultado é : 4.
Enter fullscreen mode Exit fullscreen mode

Vejamos outro exemplo para compreender perfeitamente:

11 // comprimento de arrays no arr
1 2 3 4 5 4 3 2 1 3 4 // matrix arr

3// tanto o tipo 3,como 4 se repetem 3 vezes a mais que o restante, entretanto, a segunda regra diz que caso isso ocorra, o menor valor deve prevalecer.
Enter fullscreen mode Exit fullscreen mode

Vamos então ao código de execução do desafio:

function migratoryBirds(arr) {
// O metodo reduce eh usado para acumular um objeto count que mapeia cada tipo de passaro para o numero de vezes que ele foi observado. Para cada elemento curr do array, a funcao atualiza o contador acc, que correspondente ao tipo de passaro curr

  const count = arr.reduce((acc, curr) => {
    acc[curr] = (acc[curr] || 0) + 1;
    return acc;
  }, {});

//Obejct.values -> retorna um array com os valores das propriedades do objeto count

  const maxBirds = Math.max(...Object.values(count));

// usa o metodo Object.keys para obter as chaves do objeto count, que sao os tipos de passaro. Em seguida, ela usa o metodo find para encontrar a chave (ou seja, o tipo de passaro) cujo valor no objeto count eh igual ao valor maximo encontrado anteriormente.

  return parseInt(Object.keys(count).find(key => count[key] === maxBirds));

}
Enter fullscreen mode Exit fullscreen mode

O resultado será:

6
1 4 4 4 5 3

4
Enter fullscreen mode Exit fullscreen mode
11
1 2 3 4 5 4 3 2 1 3 4

3
Enter fullscreen mode Exit fullscreen mode

Com isso concluímos mais um episódio, e nos vemos na próxima!!!

Top comments (0)