Während eines Interviews für eine Java-Entwicklerposition wurde ich wie folgt gefragt:
Schreiben Sie eine Funktion, die zwei Parameter akzeptiert:
- eine Zeichenfolge, die ein Textdokument darstellt, und
- eine Ganzzahl, die die Anzahl der zurückzugebenden Elemente angibt.
Implementieren Sie die Funktion so, dass eine Liste der nach Worthäufigkeit geordneten Zeichenfolgen zurückgegeben wird, wobei das am häufigsten vorkommende Wort zuerst angezeigt wird. Ihre Lösung sollte in -Zeit ausgeführt werden, wobei n die Anzahl der Zeichen im Dokument ist.
Folgendes habe ich beantwortet (im Pseudocode), es ist nicht , sondern O ( n log n ) Zeit wegen der Sortierung. Ich kann nicht herausfinden, wie es O ( n ) Zeit geht.
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
Weiß jemand Bescheid oder kann mir jemand Hinweise geben?
Hashtable
ist es für die Zwecke dieser Site irrelevant , ob es sich um Legacy-Java handelt oder nicht.