例如 1,2,3,4,5,6,8,9 给定5,可以找到2+3=5,1+4=5,而1*4=4最小,故返回下标0,3
因为数组有序,一般会考虑到二分查找,具体算法如下
def find1(arr,s):
if len(arr)<=2:
print("input error")
exit()
min=10000000
index1=-1
index2=-1
low=0
high=len(arr)-1
while(low<high):
if arr[low]+arr[high]==s:
if arr[low]*arr[high]<min:
min=arr[low]*arr[high]
index1=low
index2=high
low=low +1
high=high -1
elif arr[low]+arr[high]<s:
low=low+1
elif arr[low]+arr[high]>s:
high=high -1
return index1,index2
a=[2,1,3,2,4]
print(find1(a,4))