题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解题思路
数列满足递增,设两个头尾两个指针i
和j
,
若ai + aj == sum
,就是答案(相差越远乘积越小)
若ai + aj > sum
,aj
肯定不是答案之一(前面已得出 i
前面的数已是不可能),j -= 1
若ai + aj < sum
,ai
肯定不是答案之一(前面已得出j
后面的数已是不可能),i += 1
代码如下:
def FindNumbersWithSum(self, array, tsum):
left, right = 0, len(array)-1
while left < right:
if array[left] + array[right] > tsum:
right -= 1
elif array[left] + array[right] < tsum:
left += 1
else:
return [array[left], array[right]]
return []