【题目描述】
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
【解题思路】
首先有一个数学规律,8 = 0+8 = 1+7 = 2+6 = 3+5 = 4+4 , 且 0x8 < 1x7 < 2x6 < 3x5 < 4x4
由于数组是递增的,所以这道题就让两个指针start和end,start从前往后找,end从后往前找,如果在找的过程中,两个指针分别指向的两个数的和为S,就是所要求的结果。
指针的指向规则如下:
如果start和end所指的两个数之和等于S,则返回结果
如果start和end所指的两个数之和大于S,则end向前移
如果start和end所指的两个数之和小于S,则start向后移
用Python实现的代码如下:
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
start, end = 0, len(array)-1
while start <= end:
if array[start] + array[end] == tsum:
return [array[start] , array[end]]
elif array[start] + array[end] > tsum:
end -= 1
else:
start += 1
return []