[路飞]_leetcode_692. 前K个高频单词

121 阅读1分钟

给一非空的单词列表,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

解题思路

  1. 先遍历单词列表,找到每个单词出现的次数
  2. 然后根据出现的次数按降序排列,如果次数相同则按字母顺序排序
  3. 取出前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);
};