力扣--排序

排序(2)

十种排序算法复杂度
十种排序算法复杂度

-出现频率最高的前k个元素
力扣347
1.使用字典,统计每个元素出现的次数,元素为键,元素出现的次数为值。2.将频率作为数组下标,对于出现频率不同的数字集合,存入对应的下标。3.倒序遍历数组获取出现顺序从大到小的排列。

这里用python3实现桶排序,是自己想着写的,不是很完美,但是可以通过。

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        res = [[] for i in range(len(nums) + 1)]
        dic = {}
        for i in nums:
            dic[i] = dic.get(i, 0) + 1
        for num, times in dic.items():
            res[times].append(num)
        t = 0
        ans = []
        for i in range(len(nums), 0, -1):
            if res[i]!=[]:
                t +=len(res[i])
                ans.extend(res[i]) #  extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
                if t == k:
                    return ans

时间复杂度O(n):n表示列表的长度,首先遍历一遍,统计元素的频率,这一操作为O(n);桶排序的数量是n+1,所以为O(n)。因此,总的O(n)。
空间复杂度O(n):桶的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值