题目
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思考
- 解法:滑动窗口法
思路类似和为S的连续正数序列解法二。需要注意的是,有可能数组中没有满足条件的这对数,需要返回空数组。
代码
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
start,end = 0,len(array)-1
while start <= end:
if array[start] + array[end] < tsum: #如果和小于tsum,那么右移start指针
start += 1
elif array[start] + array[end] > tsum: #如果和大于tsum,那么左移end指针
end -= 1
else:
return [array[start],array[end]] #当和等于tsum时,保证start距离end最远,即乘积最小
return