输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出:
对应每个测试案例,输出两个数,小的先输出。
自己的想法是一个标记指向最小值,然后判断sum-array[low]是否在数组中,如果在计算积并存储,最终输出积最小的结果。
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
low=0
mid=len(array)//2
min_mul=float('Inf')
ans=[]
while low<mid:
if tsum-array[low] in array:
if array[low]*(tsum-array[low])<min_mul:
min_mul=array[low]*(tsum-array[low])
ans=[array[low],tsum-array[low]]
low+=1
return ans
但是提交时显示:运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
参考别人解法:和为S的两个数字,之后,修改上述方法:
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
low=0
mid=len(array)//2
min_mul=float('Inf')
ans=[]
for low in range(mid):
for v1 in array[low:]:
if array[low]+v1==tsum:
ans.append([array[low],v1])
if ans:
return ans[0]
else:
return ans