347.Top K Frequent Elements-Python

来源:互联网 发布:三维设计教学软件 编辑:程序博客网 时间:2024/06/03 15:13

Given a non-empty array of integers, return the k most frequent elements.

For example,Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note: You may assume k is always valid, 1 ? k ? number of unique elements.Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.

思路

这是一个O(n)时间复杂度的算法,优于O(nlogn)
1. 求出每个数字的频次字典
2. 按照频次,装入桶中
3. 取前K个频次

Code

Python version

class Solution(object):    def topKFrequent(self, nums, k):        """        :type nums: List[int]        :type k: int        :rtype: List[int]        """        frequencyMap={}        bucket=[]           for n in nums:            if frequencyMap.get(n)!=None:                frequencyMap[n]+=1            else:                frequencyMap[n]=1               bucket.append([])        bucket.append([])        for item in frequencyMap:            frequency = frequencyMap[item]            bucket[frequency].append(item)        res=[]        pos = len(bucket) - 1        while pos >= 0 and len(res)< k:            if len(bucket[pos])>0:                for item in bucket[pos]:                                       res.append(item)            pos-=1        return res
原创粉丝点击