Durante uma entrevista para uma posição de desenvolvedor Java, me perguntaram o seguinte:
Escreva uma função que use dois parâmetros:
- uma String representando um documento de texto e
- um número inteiro fornecendo o número de itens a serem retornados.
Implemente a função para que ela retorne uma lista de Strings ordenadas por frequência de palavra, a palavra que ocorre com mais frequência primeiro. Sua solução deve ser executada em tempo em que é o número de caracteres no documento.
A seguir é o que eu respondi (em pseudocódigo), não é mas sim O ( n log n ) tempo por causa da classificação. Não consigo descobrir como fazê-lo O ( n ) tempo.
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
Alguém sabe ou pode me dar algumas dicas?
Hashtable
não é relevante para este site (mas você pode perguntar sobre isso no StackOverflow) e, da mesma forma, se é Java legado ou não, é realmente irrelevante para os propósitos deste site.