Find K-th largest element in N arrays. You can swap elements in the array
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