LeetCode:Find K Pairs with Smallest Sums

takkii
Music and Technology
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

--

--

takkii
Music and Technology

Competitive Programming, MachineLearning, Manga, Music, BoardGame.