LeetCode 373
为了避免重复,先用第一个数组的第一个值和第二个数组的所有值进行组合,然后pop出来最小的,和第一个数组的后面的列进行组合。
def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:
if not nums1 or not nums2:
return []
M = len(nums1)
N = len(nums2)
heapSize = min(k, N)
minHeap = [(nums1[0] + nums2[i], 0, i) for i in range(heapSize)]
heapq.heapify(minHeap)
result = []
while minHeap and k > 0:
val, r, c = heapq.heappop(minHeap)
k -=1
result.append([nums1[r],nums2[c]])
if (r < M-1):
heapq.heappush(minHeap, (nums1[r+1] + nums2[c], r+1, c))
return result