La solución que te propuse es bastante eficiente. El primer bucle for tiene un orden de complejidad de O(n). Luego a la hora de insertar en el mapa no tengo ni idea de que orden de complejidad ofrecerá, pero me imagino que será el más eficiente posible.
Quizás podría incrementarse un poco la eficiencia del código que te propuse de esta forma:
Nos aprovecharíamos de que si el elemento no está almacenado en el mapa el método get() devuelve un valor nulo, y por tanto no tendríamos que realizar primero la comprobación de "ifresultados.contains()" para luego realizar el get() y posteriormente el put().
El último bucle es totalmente necesario, ya que debes recorrer todo el mapa para saber la solución, también tiene orden de complejidad O(n) en el peor caso.
Sí lo que quieres son optimizaciones sobre tu código, con lo que te he comentado tienes de sobra para pensar sobre que podrías hacer.
Saludos.
Quizás podría incrementarse un poco la eficiencia del código que te propuse de esta forma:
Código (java) [Seleccionar]
for (int i = 0; i < palabras.length; i++) {
Integer aux = resultados.get(palabras[i]);
if (aux != null) {
aux++;
resultados.put(palabras[i], aux);
} else {
resultados.put(palabras[i], 1);
}
}
Nos aprovecharíamos de que si el elemento no está almacenado en el mapa el método get() devuelve un valor nulo, y por tanto no tendríamos que realizar primero la comprobación de "ifresultados.contains()" para luego realizar el get() y posteriormente el put().
El último bucle es totalmente necesario, ya que debes recorrer todo el mapa para saber la solución, también tiene orden de complejidad O(n) en el peor caso.
Sí lo que quieres son optimizaciones sobre tu código, con lo que te he comentado tienes de sobra para pensar sobre que podrías hacer.
Saludos.