前K个高频单词(排序)

力扣:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。

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

示例 1:

输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
    注意,按字母顺序 "i" 在 "love" 之前。

示例 2:

输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
    出现次数依次为 4, 3, 2 和 1 次。

注意:

  • 1 <= words.length <= 500
  • 1 <= words[i] <= 10
  • words[i] 由小写英文字母组成。
  • k 的取值范围是 [1, 不同 words[i] 的数量]

示例代码1:

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        hash = collections.Counter(words)
        res = sorted(hash, key=lambda word: (-hash[word], word))
        return res[:k]

示例代码2:

from heapq import nsmallest
from typing import List


class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        freq = {}
        for word in words:
            freq[word] = freq.get(word, 0) + 1
        return nsmallest(k, freq, key=lambda x: (-freq[x], x))


if __name__ == '__main__':
    words = ["i", "love", "leetcode", "i", "love", "coding"]
    obj = Solution()
    res = obj.topKFrequent(words, 2)
    print(res)

猜你喜欢

转载自blog.csdn.net/weixin_44799217/article/details/132592267