原题
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
Reference Answer
思路分析
设定两个指针,一个指向数组的起点,一个指向数组的终点,然后对两个数字求和,如果和大于目标值,则把后一个指针前移,如果和小于目标值,则把前一个指针后移。两个指针交汇的时候如果还没找到,就终止操作。
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if len(array) <= 1:
return []
left, right = 0, len(array) - 1
temp_res, res = [], []
temp_res = {}
while array[left] < array[right]:
if array[left] + array[right] < tsum:
left += 1
elif array[left] + array[right] == tsum:
index = array[left] * array[right]
temp_res[index] = [array[left], array[right]]
left += 1
elif array[left] + array[right] > tsum:
right -= 1
if not temp_res:
return []
res = sorted(temp_res.items(), key=lambda temp_res:temp_res[0])
return res[0][1]