Durante una entrevista para un puesto de desarrollador de Java, me preguntaron lo siguiente:
Escribe una función que tome dos parámetros:
- una cadena que representa un documento de texto y
- un número entero que proporciona la cantidad de artículos a devolver.
Implemente la función de modo que devuelva una lista de cadenas ordenadas por frecuencia de palabra, la palabra que aparece con más frecuencia primero. Su solución debe ejecutarse en tiempo donde n es el número de caracteres en el documento.
Lo siguiente es lo que respondí (en pseudocódigo), no es sino tiempo O ( n log n ) debido al tipo. No puedo entender cómo hacerlo O ( n ) tiempo.
wordFrequencyMap = new HashMap<String, Integer>();
words = inputString.split(' ');
for (String word : words) {
count = wordFrequencyMap.get(word);
count = (count == null) ? 1 : ++count;
wordFrequencyMap.put(word, count);
}
return wordFrequencyMap.sortByValue.keys
¿Alguien sabe o alguien puede darme algunas pistas?
Hashtable
es Java heredado o no, es realmente irrelevante para los propósitos de este sitio.