Give two Lists, give a maximum value, find a bunch in each of the two lists, and find all the pairs that are closest to the maximum but not larger than the maximum.
The length of the two lists do not exceed100000100000.
Each element do not exceed10000000001000000000.
Explanation:
the sum of [3,7],[5,5],[6,4] is 10, which is no larger than 10.
分析
还是都排序, start从a头走,end 从B尾走。判断3个 target =>< subsum,同时每个里面根据diff和Mindiff决定 是新res 还是append res
class Solution:
"""
@param a: the first list
@param b: the second list
@param x: the max sum
@return: the pairs whose sum are not exceed x
"""
def getAns(self, a, b, x):
# Write your code here.
a.sort()
b.sort()
s = 0
e = len(b) - 1
res = []
mindiff = float('inf')
while s < len(a) and e >= 0:
subsum = a[s] + b[e]
d = x - subsum
if d == 0:
if d == mindiff:
res.append([a[s] , b[e]])
else:
res = [[a[s] , b[e]]]
mindiff = d
s+=1
e-=1
elif d > 0:
if d < mindiff:
res = [[a[s] , b[e]]]
mindiff = d
elif d == mindiff:
res.append([a[s] , b[e]])
s += 1
else:
e -= 1
return res