Advertisement

二维数组取其数值大小的前top k项

阅读量:

题目描述

一个二维数组,其中每一行按照从大到小的顺序排列,且各行的元素数量并不一致,需要从中挑选出去重后的前k个最大数值。
输入:
[
[10,9,7,5,2]
[8,6,3]
[10,9,8,5]
]
需要获取前5个最大的数值
输出:
[10,9,8,7,6]

做法思想

在处理类似选取前k个最大或最小元素的问题时,通常会考虑采用最大堆或最小堆的数据结构加以解决。针对当前问题,可以尝试建立k个最大堆进行比较操作,当某一堆的顶部元素被选中后,将其对应的指针向后移动。

具体代码

复制代码
    import heapq
    def run(nums, k):
    	m = len(nums)
    	list1 = [0] * m
    	heap = []
    	for i in range(m):
    		list1[i] = len(nums[i])
    		# 将每个数组的第一个元素加入最大堆中
    		# 将数字变成负数,是因为python自带包实现的是最小堆,通过变成负数从而实现最大堆
    		if list1[i] > 0:
    			heapq.heappu

全部评论 (0)

还没有任何评论哟~