Top K Frequent Words
Description:
Given a list of words and an integer k, return the top k frequent words in the list.
Example
Given
[
“yes”, “lint”, “code”,
“yes”, “code”, “baby”,
“you”, “baby”, “chrome”,
“safari”, “lint”, “code”,
“body”, “lint”, “code”
]
for k = 3, return [“code”, “lint”, “baby”].
for k = 4, return [“code”, “lint”, “baby”, “yes”],
Challenge
Do it in O(nlogk) time and O(n) extra space.
Notice
You should order the words by the frequency of them in the return list, the most frequent one comes first. If two words has the same frequency, the one with lower alphabetical order come first.
Code:
1.
class Solution:
"""
@param words: an array of string
@param k: An integer
@return: an array of string
"""
def topKFrequentWords(self, words, k):
# write your code here
dic = collections.Counter(words)
heap = []
import heapq
for key, value in dic.items():
heapq.heappush(heap, (key, -value))
return [a[0] for a in heapq.nsmallest(k, heap, key=lambda t:(t[1], t[0]))]
2.
class Solution:
"""
@param words: an array of string
@param k: An integer
@return: an array of string
"""
def topKFrequentWords(self, words, k):
# write your code here
dic = {}
for i in words:
dic[i] = dic[i]-1 if i in dic else -1
res = sorted(dic.items(), key=lambda t:(t[1], t[0]))[:k]
return [a[0] for a in res]