首页 > 其他 > 详细

领扣543. Kth Largest in N Arrays

时间:2019-11-06 09:03:17      阅读:75      评论:0      收藏:0      [点我收藏+]

Description

Find K-th largest element in N arrays. You can swap elements in the array

Example

Example 1:

Input:
k=3, [[9,3,2,4,7],[1,2,3,4,8]]
Output:
7
Explanation:
the 3rd largest element is 7

Example 2:

Input:
k = 2, [[9,3,2,4,8],[1,2,3,4,2]]
Output:
8
Explanation:
the 1st largest element is 9, 2nd largest element is 8, 3rd largest element is 4

对每个数组排完序后,先把每个数组的最后一位数添加到空的heapq里,然后每次pop出堆顶元素,每次pop完之后,如果该数字不在对应array的第一位,那就把该数字前一位数字加入到堆中。注意python里的堆默认是最小堆,不知道怎么改写比较器,这里耍个小聪明,每次push进数字的相反数。对每个数组排序的复杂度是Σnilogni, ni为arrayi的长度,每次进堆、出堆的操作都是logm,其中m是array的长度,所有总时间复杂度是o(Σnilogni+klogm)

代码如下:

import heapq
class Solution:
    def KthInArrays(self, arrays, k):
        # write your code here
        if len(arrays)==0: return(None)
        for i in range(len(arrays)): arrays[i].sort()
        minHeap=[]
        for i in range(len(arrays)):
            if len(arrays[i])>0: heapq.heappush(minHeap,(-arrays[i][-1],i,len(arrays[i])-1))
        for i in range(k):
            num,arrayIndex,elementIndex=heapq.heappop(minHeap)
            if elementIndex>0:
                heapq.heappush(minHeap,(-arrays[arrayIndex][elementIndex-1],arrayIndex,elementIndex-1))
        return(-num)

 

领扣543. Kth Largest in N Arrays

原文:https://www.cnblogs.com/Leisgo/p/11802920.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!