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
arr
que 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.
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.
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));
}
O resultado será:
6
1 4 4 4 5 3
4
11
1 2 3 4 5 4 3 2 1 3 4
3
Com isso concluímos mais um episódio, e nos vemos na próxima!!!
Top comments (0)