华为机考题 | 前 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) 

上一篇下一篇

猜你喜欢

热点阅读