Open diemax opened 4 years ago
performance es correcto, la solucion es n * 2 (no n 2 pero asumo que fue un error de teclado).
Tu solucion es correcta pero es la mas ineficiente. Tip, investiga acerca de las hashtable (en JS es un simple objeto {}) y usalo a tu favor, el runtime de este programa se puede reducir a O(n)
const str = ['hello', 'world', 'hello', 'world', 'world'];
function mostRepeated(str) {
let repeated = str[0];
let greater = 0;
const checked = {};
for (let idx = 0; idx < str.length; idx++) {
checked[str[idx]] = (checked[str[idx]] || 0) + 1;
if (checked[str[idx]] > greater) {
greater = checked[str[idx]];
repeated = str[idx]
}
}
return repeated;
}
console.log(mostRepeated(str)); // 'world'
Esta es la solución que se me vino a la mente ahora, por suerte después de hacer un poco de debugging me daba cuenta de los errores mientras iba modificando el ejemplo anterior. Los pasos que vinieron a mi mente son:
1
(si no existe pues el valor inicial es 0
).0
para empezar) lo reemplazo, y de paso asigno ese string al most repeated
en ese momento.Any thoughts?
Hola Rodrigo! :smile:
Este problema es super básico, pero esta vez despues de resolver unos cuantos en
exercism
por fin tuve tiempo de mirarlo, estos son los pasos que vinieron a mi mente:current
word.current
word.current
si el contador esmayor al greater
esa palabra pasa a ser la más repetida.current word
dentro dechecked
así me aseguro de no recorrerla más de una vez por palabras.Sidenotes
O (n * 2)
, y no se me ocurrió una forma mas rápida 😅Que te parece? Cuando tengas tiempo si tienes 10 minutos para dejarme un feedback? 😅
Muchas gracias!