LeetCode:Find K Pairs with Smallest Sums
Published in
1 min readSep 22, 2019
This problem is difficult for me.
class Solution(object):
def kSmallestPairs(self, nums1, nums2, k):
"""
:type nums1: List[int]
:type nums2: List[int]
:type k: int
:rtype: List[List[int]]
"""
tables = ([[1 for _ in range(len(nums2) + 1)]] +
[[1] + [0 for _ in range(len(nums2))] for _ in range(len(nums1))])
# print(tables)
def read_tables(i1,i2):
return tables[i1+1][i2+1]
def write_tables(i1,i2,num):
tables[i1+1][i2+1] = num
def push_output_and_write_table(idx1,idx2):
outputs.append([nums1[idx1],nums2[idx2]])
write_tables(idx1,idx2,1)
if len(nums1)==0 or len(nums2) == 0:
return []
candidates = [(nums1[0]+nums2[0],(0,0))]
heapq.heapify(candidates)
outputs = []
while len(outputs) < k and len(candidates) > 0:
_,(idx1,idx2) = heapq.heappop(candidates)
push_output_and_write_table(idx1,idx2)
if idx1+1 < len(nums1) and read_tables(idx1+1,idx2-1) == 1:
heapq.heappush(candidates, (nums1[idx1+1]+nums2[idx2],(idx1+1,idx2)))
if idx2+1 < len(nums2) and read_tables(idx1-1,idx2+1) == 1:
heapq.heappush(candidates, (nums1[idx1]+nums2[idx2+1],(idx1,idx2+1)))
return outputs