题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
思路:
方法一:粗暴遍历法
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array or not tsum:
return array
for i in range(len(array)):
res = tsum - array[i]
if res in array[0:i]+array[i+1:]:
return [array[i],res]
return []
方法二:数组前后两个指针
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
if not array or not tsum:
return array
small = 0
big = len(array) - 1
minn = 100000
res = []
cur_sum = array[small] + array[big]
while array[small] < tsum/2:
if cur_sum == tsum:
if minn > array[small]*array[big]:
res = [array[small],array[big]]
minn = array[small]*array[big]
while cur_sum < tsum and array[small] < tsum/2:
small += 1
cur_sum = array[small] + array[big]
if cur_sum == tsum:
if minn > array[small]*array[big]:
res = [array[small],array[big]]
minn = array[small]*array[big]
big -= 1
cur_sum = array[small] + array[big]
return res