牛客网上的剑指offer在线编程题:
题目描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
方法一:
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
all = []
for i in range(len(array)):
for j in range(i + 1, len(array)):
if array[i] + array[j] == tsum:
seq = [array[i], array[j]]
all.append(seq)
break
if len(all) > 1:
pro_all = {}
for k in range(len(all)):
pro = all[k][0] * all[k][1]
pro_all[k] = pro
pro_sorted = sorted(pro_all.items(), key = lambda item: item[1])
return all[pro_sorted[0][0]]
elif len(all) == 1:
return all[0]
else:
return []
方法二:
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
if array is None :
return []
if len(array) == 0:
return []
i = 0
j = len(array) - 1
while i < j:
if array[i] + array[j] == tsum:
return array[i], array[j]
elif array[i] + array[j] < tsum:
i += 1
else:
j -= 1
return []