g0601_0700.s0692_top_k_frequent_words.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0692_top_k_frequent_words;
// #Medium #String #Hash_Table #Sorting #Heap_Priority_Queue #Counting #Trie #Bucket_Sort
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
public class Solution {
/*
* O(n) extra space
* O(nlogk) time
*/
public List topKFrequent(String[] words, int k) {
Map map = new HashMap<>();
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
SortedSet> sortedset =
new TreeSet<>(
(e1, e2) -> {
if (e1.getValue().intValue() != e2.getValue().intValue()) {
return e2.getValue() - e1.getValue();
} else {
return e1.getKey().compareToIgnoreCase(e2.getKey());
}
});
sortedset.addAll(map.entrySet());
List result = new ArrayList<>();
Iterator> iterator = sortedset.iterator();
while (iterator.hasNext() && k-- > 0) {
result.add(iterator.next().getKey());
}
return result;
}
}