二维数组取其数值大小的前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)
还没有任何评论哟~
