En una entrevista reciente me pidieron que escribiera el siguiente programa. Descubre el personaje cuya frecuencia es mínima en la cadena dada? Así que intenté iterando a través de la cadena utilizando charAt y almacenando el carácter como clave en un HashMap y el número de ocurrencias como su valor. Ahora otra vez tengo que repetir en el mapa para encontrar el elemento más bajo.Manera eficiente de encontrar la Frecuencia de un personaje en una Cadena en java: O (n)
Hay una manera más eficiente de hacerlo ya que, obviamente, el anterior es demasiado intensivo, supongo.
Actualización y otra solución
Después de un proceso de pensamiento y respuestas creo que el mejor momento que este puede ser es O (n). En la primera iteración tendremos que iterar a través de la Cadena carácter por carácter y luego almacenar su frecuencia en una Matriz en la posición específica (el carácter es un int) y al mismo tiempo tener dos variables temporales que mantienen el conteo menor y el carácter correspondiente Así que cuando voy al siguiente caracter y almaceno su frecuencia en arr [char] = arr [char] +1; Al mismo tiempo verificaré si la variable temporal tiene un valor mayor que este valor, si es así, entonces la temperatura varible será este valor y también el char será este. De esta manera, supongo que no necesitamos una segunda iteración para encontrar el más pequeño y tampoco se requiere ordenamiento Supongo
.... ¿Qué dice? O más soluciones
su tiempo de ejecución es O (2n) = O (n). Lo mejor que puedes hacer es O (n). Tal vez puedas deshacerte de la segunda iteración, pero eso es todo. – Kevin
La segunda iteración es constante. El algoritmo está bien, pero sugiero usar una matriz en lugar de HashMap y eso debería ser más eficiente. – DHall
@Kevin ... sí ... si es un mapa ordenado, la segunda iteración puede ser O (1) para encontrar el carácter de ocurrencia menor o mayor ... – crackerplace