fork download
  1. import java.util.*;
  2.  
  3. class TopKFrequentReadable {
  4.  
  5. public static List<String> topKFrequent(String[] words, int k) {
  6. if (words == null || k <= 0) {
  7. return Collections.emptyList();
  8. }
  9.  
  10. Map<String, Integer> freq = new HashMap<>();
  11. for (String w : words) {
  12. freq.put(w, freq.getOrDefault(w, 0) + 1);
  13. }
  14.  
  15. List<String> uniqueWords = new ArrayList<>(freq.keySet());
  16.  
  17. uniqueWords.sort(new Comparator<String>() {
  18. @Override
  19. public int compare(String a, String b) {
  20. int fa = freq.get(a);
  21. int fb = freq.get(b);
  22. if (fa != fb) {
  23. return Integer.compare(fb, fa);
  24. }
  25. return a.compareTo(b);
  26. }
  27. });
  28.  
  29. int end = Math.min(k, uniqueWords.size());
  30. return new ArrayList<>(uniqueWords.subList(0, end));
  31. }
  32.  
  33. public static void main(String[] args) {
  34. String[] words1 = {"java", "python", "java", "golang", "java", "python"};
  35. System.out.println(topKFrequent(words1, 2)); // [java, python]
  36.  
  37. String[] words2 = {"apple", "banana", "apple", "banana", "cherry"};
  38. System.out.println(topKFrequent(words2, 3)); // [apple, banana, cherry]
  39.  
  40.  
  41. System.out.println(topKFrequent(null, 2)); // []
  42. System.out.println(topKFrequent(new String[]{"x","y"}, 0)); // []
  43. System.out.println(topKFrequent(new String[]{"a","b","c"}, 10)); // returns all unique: [a,b,c]
  44. }
  45. }
  46.  
  47.  
Success #stdin #stdout 0.07s 54652KB
stdin
Standard input is empty
stdout
[java, python]
[apple, banana, cherry]
[]
[]
[a, b, c]