原题
Given a non-empty list of words, return the k most frequent elements.
Your answer should be sorted by frequency from highest to lowest. If two words have the same frequency, then the word with the lower alphabetical order comes first.
Example 1:
Input: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2
Output: [“i”, “love”]
Explanation: “i” and “love” are the two most frequent words.
Note that “i” comes before “love” due to a lower alphabetical order.
Example 2:
Input: [“the”, “day”, “is”, “sunny”, “the”, “the”, “the”, “sunny”, “is”, “is”], k = 4
Output: [“the”, “is”, “sunny”, “day”]
Explanation: “the”, “is”, “sunny” and “day” are the four most frequent words,
with the number of occurrence being 4, 3, 2 and 1 respectively.
Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Input words contain only lowercase letters.
Follow up:
Try to solve it in O(n log k) time and O(n) extra space.
解法
先用collections.Counter()统计单词的频率, 然后将结果先按照频数降序, 再按照字母升序排列, 然后从tuple中提取第一个元素, 即word, 最后取前k个元素.
Time: O(n*log(n))
Space: O(n)
代码
class Solution(object):
def topKFrequent(self, words, k):
"""
:type words: List[str]
:type k: int
:rtype: List[str]
"""
count = collections.Counter(words)
res = sorted(count.items(), key = lambda x: (-x[1], x[0]))
res = [tup[0] for tup in res]
return res[:k]
本文介绍了一种使用Python的collections.Counter统计给定单词列表中单词出现频率的方法,并通过排序算法返回频率最高的k个单词,同时考虑了字母顺序。示例展示了如何处理不同输入情况。
399

被折叠的 条评论
为什么被折叠?



