70-Heap--LC692前K个高频单词

该博客探讨了如何使用Python的heapq模块和collections.Counter来有效地找到列表中出现频率最高的K个元素。首先,通过Counter计算每个元素的频率,然后利用堆数据结构将元素及其频率转换为堆。通过heappop操作,可以按频率降序获取Top K的元素。此外,还提到了使用排序实现相同功能的方法,但堆在处理大数据集时更具优势。

在这里插入图片描述
通常在问题中看到 前 K 大,前 KK小 或者 第 K 个, K 个最 等等类似字样,一般情况下我们都可以用堆来做。

class Solution(object):
    def topKFrequent(self, words, k):
        """
        :type words: List[str]
        :type k: int
        :rtype: List[str]
        """
        # collections.Counter(words)为python自带的计数器
        count = collections.Counter(words)
        heap = [(-freq, word) for word, freq in count.items()]
        heapq.heapify(heap)
        return [heapq.heappop(heap)[1] for _ in range(k)]

		# 普通排序
		d = collections.Counter(words)
        pairs = [(value, key) for key, value in d.items()]
        res = sorted(pairs, key = lambda a:(-a[0], a[1]))
        return [res[i][1] for i in range(k)]

Todo:这是API实现的,要自己写堆,自己写比较函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值