赞
踩
问题:
题目来源:力扣(LeetCode)
难度:中等
分析:
本题解提供四种方法,分别是python的Counter技巧、堆、桶排序、快排。
对于python语言来说,这道题可以用python技巧一行做完,Counter的计数排序功能太强大。
堆天生适合求前k个最大/最小值。
桶适合计数排序的题目。
快排思想也适合寻找k大、k小元素。
解决方法:
1:Counter技巧
#python技巧
#直接使用Counter计数,直接取频数最大的几位
#collections.Counter(nums).most_common(k)代表取频数最大的k位,key和value打包成元组储存在列表中。
#*代表不确定几位,可有多位
#zip将对应位置元素打包成元组
#打包完后,第0个元素就是要求的,但是zip类型不能直接取,得先变成list,然后取第0位。
import collections
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
return list(zip(*collections.Counter(nums).most_common(k)))[0]
复杂度:O(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。