[LeetCode][Python]Top K Frequent Elements
op K Frequent Elements
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.
https://leetcode.com/problems/top-k-frequent-elements/
求出现频率最高的K个数,要求时间复杂度不能超过 O(n log n)。
选择最简单的快排O(n log n)来解决,先求出每个数出现的几率,然后排序求出结果。
排序的地方用lambda函数,就是一个匿名方法,如果是升序,写成:
list.sort(key=lambda x:x[1])
相当于:
list.sort(lambda a,b:cmp(a[1],b[1]))
1 class Solution(object): 2 def topKFrequent(self, nums, k): 3 """ 4 :type nums: List[int] 5 :type k: int 6 :rtype: List[int] 7 """ 8 self.__dict = {}; list = []; res = [] 9 for item in nums: 10 if self.__dict.has_key(item): 11 self.__dict[item] += 1 12 else: 13 self.__dict[item] = 1 14 for item in self.__dict: 15 list.append((item, self.__dict[item])) 16 list.sort(key=lambda x:-x[1]) 17 for i in range(k): 18 res.append(list[i][0]) 19 return res