给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
解题思路
- 先遍历单词列表,找到每个单词出现的次数
- 然后根据出现的次数按降序排列,如果次数相同则按字母顺序排序
- 取出前k个出现次数最多的单词
代码
var topKFrequent = function(words, k) {
let freq = new Map();
for (let w of words) freq.get(w) ? freq.set(w, freq.get(w)+1) : freq.set(w, 1);
freq = Array.from(freq);
freq.sort((a,b) =>{
if (a[1] < b[1]) return 1;
if (a[1] > b[1]) return -1;
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
})
let res = [];
freq.forEach(item => {
res.push(item[0])
});
return res.slice(0, k);
};