[leetcode] 692. Top K Frequent Words @ python

原题 Given a non-empty list of words, return the k most frequent elements.
【[leetcode] 692. Top K Frequent Words @ python】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]

    推荐阅读