给定一个非空的整数数组,要求返回k个最常见的元素,即返回k个高频整数
。题目要求时间复杂度要优于O(n logn)
,那也就是不能直接对数组排序然后返回前k个不等的整数。
思路一:
使用dict用来记录数字及其出现的次数,然后对dict进行排序,返回要求结果,勉强符合题目要求。
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
res = []
dic = {}
for i in nums:
dic[i] = dic[i]+1 if i in dic else 1
dic_sorted = sorted(dic.items(), key=lambda d:d[1], reverse=True) #从高到低排序
for j in range(k):
res.append(dic_sorted[j][0])
return res
- 相关知识点:
o. 字典排序:以values为条件,对items进行从高到低(reverse=True)的排序。
dic_sorted = sorted(dic.items(), key=lambda d:d[1], reverse=True)