栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python手搓代码:优先队列(堆) TopK 类型算法总结_topk算法堆排序?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python手搓代码:优先队列(堆) TopK 类型算法总结_topk算法堆排序?

目录

数据流中的第 K 大元素

解题思路实现代码

数据流中的第 K 大元素

设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。

请实现 KthLargest 类:

KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。

题目ID:703

解题思路

对于可能重复的数组来说,第K大元素类型题目直接使用优先队列来进行处理。

实现代码
class KthLargest:
    def __init__(self, k: int, nums: List[int]):
        self.nums = nums
        self.k = k
        heapq.heapify(self.nums)

    def add(self, val: int) -> int:
        heapq.heappush(self.nums,val)
        while len(self.nums)>self.k:
            heapq.heappop(self.nums)
        return self.nums[0]#

细节:
heapq是直接对list进行操作
heapq只有小顶堆,nums[0]最小
如需实现大顶堆,将push的值用相反数即可实现

TopK也可使用heapq.nlargest得到TopK个数字,但是在数据量大时效率低,K越大,耗时越长。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782876.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号