Re: [闲聊] 每日LeetCode

楼主: Rushia (みけねこ的鼻屎)   2022-10-19 17:45:48
692. Top K Frequent Words
给予一个字串阵列words和一个数字k,返回出现频率最高的k种字串行表,若多个字串
出现次数相同,则字母顺序较大的优先。
Input: words = ["i","love","leetcode","i","love","coding"], k = 2
Output: ["i","love"]
Explanation:k为2而 "i" 和 "love" 是出现次数最多的字串。
思路:
1.用一个 HashMap 纪录所有单字的出现次数。
2.把Map所有的键值放入Heap,并按照题目给的规则排序。
3.从Heap中拿出k个元素加入列表后返回。
JavaCode:
class Solution {
public List<String> topKFrequent(String[] words, int k) {
List<String> res = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
for(String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
PriorityQueue<String> queue = new PriorityQueue<>(
(a, b) ->
map.get(a) == map.get(b)
? a.compareTo(b)
: map.get(b) - map.get(a)
);
for(String key : map.keySet())
queue.offer(key);
for(int i = 0; i < k; i++)
res.add(queue.poll());
return res;
}
}
芒果假面
https://i.imgur.com/MKk0ZMM.jpg

Links booklink

Contact Us: admin [ a t ] ucptt.com