<div>
Given an array of strings words and an integer k, return the k most frequent strings.
Return the answer sorted by the frequency from highest to lowest. Sort the words with the same frequency by their lexicographical order.
Example 1:
<pre>Input: words = ["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. </pre>
Example 2:
<pre>Input: words = ["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. </pre>
Constraints:
1 <= words.length <= 5001 <= words[i] <= 10words[i]consists of lowercase English letters.kis in the range[1, The number of **unique** words[i]]
Follow-up: Could you solve it in O(n log(k)) time and O(n) extra space?
</div>
题目大意:
求k个最高频率的单词
解题思路:
N/A
解题步骤:
N/A
注意事项:
- 若频率一样,就按字母顺序lexicographical. 所以用大小为k的heap做比较困难。直接用排序即可
Python代码:
1
2
3
4
5def topKFrequent(self, words: List[str], k: int) -> List[str]:
freq_dict = collections.Counter(words)
li = [(freq, word) for word, freq in freq_dict.items()]
li.sort(key=lambda x : (-x[0], x[1]))
return [pair[1] for pair in li[:k]]
算法分析:
时间复杂度为O(nlogn),空间复杂度O(n)


