Description
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/top-k-frequent-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Solution 小根堆
- 时间复杂度O(nlogk),也可以直接用大根堆,但是时间复杂度会到O(nlogn)。
- 可以使用快排的方法时间复杂度降低为O(n)。
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dic=dict()
for num in nums:
if num in dic.keys():
dic[num]+=1
else:
dic[num]=1
heap=list()
out=[]
for num in dic.keys():
if len(heap)<k:
heappush(heap,(dic[num],num))
elif len(heap) == k:
if dic[num]>heap[0][0]:
heappop(heap)
heappush(heap,(dic[num],num))
return [i[1] for i in heap]
# 作者:f4prime
# 链接:https://leetcode-cn.com/problems/top-k-frequent-elements/solution/dui-cao-zuo-by-f4prime/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。