题目:
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
例如,
给定数组 [1,1,1,2,2,3]
, 和 k = 2,返回 [1,2]
。
注意:
- 你可以假设给定的 k 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。
- 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
分析:
- 统计各元素出现频次,时间复杂度O(n)
- 将统计结果按频次排序,内置sort函数,采用归并排序,时间复杂度O(nlgn)
- 取前k项,时间复杂度O(1)
代码:
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
numsDict = collections.Counter(nums)
freqKey = sorted(numsDict.items(),key = lambda x:x[1],reverse=True)
ret = zip(*freqKey[:k])[0]
return ret
思考:
- 时间复杂度O(n) + O(nlgn) + O(1) = O(nlgn)