[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

 

posted @ 2016-05-13 16:34  `Liok  阅读(711)  评论(0编辑  收藏  举报