import java.util.*;
class TopKFrequentReadable {
public static List
<String
> topKFrequent
(String[] words,
int k
) { if (words == null || k <= 0) {
}
Map
<String, Integer
> freq
= new HashMap
<>(); freq.put(w, freq.getOrDefault(w, 0) + 1);
}
List<String> uniqueWords = new ArrayList<>(freq.keySet());
uniqueWords.sort(new Comparator<String>() {
@Override
int fa = freq.get(a);
int fb = freq.get(b);
if (fa != fb) {
}
return a.compareTo(b);
}
});
int end
= Math.
min(k, uniqueWords.
size()); return new ArrayList<>(uniqueWords.subList(0, end));
}
public static void main
(String[] args
) { String[] words1
= {"java",
"python",
"java",
"golang",
"java",
"python"}; System.
out.
println(topKFrequent
(words1,
2)); // [java, python]
String[] words2
= {"apple",
"banana",
"apple",
"banana",
"cherry"}; System.
out.
println(topKFrequent
(words2,
3)); // [apple, banana, cherry]
System.
out.
println(topKFrequent
(null,
2)); // [] System.
out.
println(topKFrequent
(new String[]{"x",
"y"},
0)); // [] System.
out.
println(topKFrequent
(new String[]{"a",
"b",
"c"},
10)); // returns all unique: [a,b,c] }
}
aW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgVG9wS0ZyZXF1ZW50UmVhZGFibGUgewoKICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IHRvcEtGcmVxdWVudChTdHJpbmdbXSB3b3JkcywgaW50IGspIHsKICAgICAgICBpZiAod29yZHMgPT0gbnVsbCB8fCBrIDw9IDApIHsKICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwogICAgICAgIH0KCiAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gZnJlcSA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICBmb3IgKFN0cmluZyB3IDogd29yZHMpIHsKICAgICAgICAgICAgZnJlcS5wdXQodywgZnJlcS5nZXRPckRlZmF1bHQodywgMCkgKyAxKTsKICAgICAgICB9CgogICAgICAgIExpc3Q8U3RyaW5nPiB1bmlxdWVXb3JkcyA9IG5ldyBBcnJheUxpc3Q8PihmcmVxLmtleVNldCgpKTsKCiAgICAgICAgdW5pcXVlV29yZHMuc29ydChuZXcgQ29tcGFyYXRvcjxTdHJpbmc+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN0cmluZyBhLCBTdHJpbmcgYikgewogICAgICAgICAgICAgICAgaW50IGZhID0gZnJlcS5nZXQoYSk7CiAgICAgICAgICAgICAgICBpbnQgZmIgPSBmcmVxLmdldChiKTsKICAgICAgICAgICAgICAgIGlmIChmYSAhPSBmYikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLmNvbXBhcmUoZmIsIGZhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVUbyhiKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBpbnQgZW5kID0gTWF0aC5taW4oaywgdW5pcXVlV29yZHMuc2l6ZSgpKTsKICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDw+KHVuaXF1ZVdvcmRzLnN1Ykxpc3QoMCwgZW5kKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN0cmluZ1tdIHdvcmRzMSA9IHsiamF2YSIsICJweXRob24iLCAiamF2YSIsICJnb2xhbmciLCAiamF2YSIsICJweXRob24ifTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odG9wS0ZyZXF1ZW50KHdvcmRzMSwgMikpOyAvLyBbamF2YSwgcHl0aG9uXQoKICAgICAgICBTdHJpbmdbXSB3b3JkczIgPSB7ImFwcGxlIiwgImJhbmFuYSIsICJhcHBsZSIsICJiYW5hbmEiLCAiY2hlcnJ5In07CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvcEtGcmVxdWVudCh3b3JkczIsIDMpKTsgLy8gW2FwcGxlLCBiYW5hbmEsIGNoZXJyeV0KCiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvcEtGcmVxdWVudChudWxsLCAyKSk7IC8vIFtdCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvcEtGcmVxdWVudChuZXcgU3RyaW5nW117IngiLCJ5In0sIDApKTsgLy8gW10KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odG9wS0ZyZXF1ZW50KG5ldyBTdHJpbmdbXXsiYSIsImIiLCJjIn0sIDEwKSk7IC8vIHJldHVybnMgYWxsIHVuaXF1ZTogW2EsYixjXQogICAgfQp9Cgo=