领扣543. Kth Largest in N Arrays

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)

猜你喜欢

转载自www.cnblogs.com/Leisgo/p/11802920.html