给定一个数M,查找数组中是否存在两数之和为M(二分查找)

思路

对数组A进行循环,并使用二分查找,查找是否存在M-A[i],以降低算法复杂度。需要注意的是,要确保找到的M-A[i]与A[i]不是一个数,所以需要二分查找返回在原始数组中的下标,进行下标的判断。

代码

def binfind(A,m):
    if len(A)==0:
        return -1
    low = 0
    high = len(A)
    while(low<high):
        mid = int(low+(high-low)/2)
        if A[mid]==m:
            return mid
        if A[mid]<m:
            low=mid+1
        if A[mid]>m:
            high = mid
    return -1

a = [5,4,3,2,1]
a.sort()
mysum=9
for i in range(0,len(a)):
    m = mysum-a[i]
    index = binfind(a,m)
    if index != -1 and index != i:
        print(i,index)
        break

你可能感兴趣的:(给定一个数M,查找数组中是否存在两数之和为M(二分查找))