[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

 

转载于:https://www.cnblogs.com/Liok3187/p/5489903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值