題目描述
輸入一個遞增排序的數組和一個數字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 []