华为机考题 | 前 K 个高频元素----python实现
2020-02-16 本文已影响0人
金融测试民工
题目描述
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
说明:
你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
思路
统计每个数的频率,输出最大的几个,这完全迎合了Python中的Counter类,调用其的几个方法即可
from collections import Counter
class Solution:
def topKFrequent(self,nums: List[int],k: int)-> List[int]:
return[i[0]for i in Counter(nums).most_common(k)]
或:
from collections import Counter
class Solution:
def topKFrequent(self,nums: List[int],k: int)-> List[int]:
count = collections.Counter(nums)
return heapq.nlargest(k,count.keys(),key=count.get)