# 692. Top K Frequent Words

{% embed url="<https://leetcode.com/problems/top-k-frequent-words/>" %}

看到O(n\*logk) 就想到heap了，本来想只维护一个长度为k的堆，但因为次数相同要遵照字母顺序，怎么都写不对，还是得用大根堆，对整个list做了堆排序。

```python
class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        freq = [(-count, word) for word, count in collections.Counter(words).items()]
        heapq.heapify(freq)
        
        res = []
        for _ in range(k):
            res.append(heapq.heappop(freq)[1])
            
        return res
```

可以 sort 来做，非常 pythonized:

```python
class Solution:
		def topKFrequent(self, words: List[str], k: int) -> List[str]:
				return [sorted(collections.Counter(words).items(), key=lambda x:(-x[1], x))[i][0] for i in range(k)]
```
