题意
Given a non-empty array of integers, return the k most frequent elements.
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
python实现
class Solution(object):
def topKFrequent(self, nums, k):
# c = collections.Counter(nums) # Counter({1: 3, 2: 2, 3: 1})
# k_most_common = c.most_common(k) # [(1, 3), (2, 2)]
# return [element for element, count in k_most_common] # [1, 2]
# 桶排序
bucket = [[] for i in range(len(nums)+1)]
res = []
freq = collections.Counter(nums)
for key, val in freq.items(): # key为数字,val为这个数字出现的次数
bucket[val].append(key)
for i in range(len(bucket)-1, -1, -1): # 从大往小找
if len(bucket[i]): res += bucket[i]
if len(res) >= k: return res[0:k]
记录一下字典的排序!
cc = {}
tup = sorted(cc.items(), key = lambda x: x[1], reverse=True) # [(key,val)]