例2:给定一个整形数组A,以及整数M=9,判断A中是否存在这样的i,j,使得 M =A[i]+A[j];
这里我们用折半查找。
折半查找:就是在一个升序的数组中查找指定的元素,先找出数组中的中间元素,如果等于指定元素,那么直接返回,如果小于指定元素,那么直接在数组前半部分查找;如果大于指定元素,直接在数组后半部分查找;
def binaryFind(A,m):
if len(A) ==0:
return -1
i = int(len(A) / 2)
if A[i] == m:
return i
if A[i] > m and i-1>= 0:
return binaryFind(A[0:i-1],m)
if A[i] < m and i +1 < len(A):
return binaryFind(A[i: len(A)],m)
return -1
A = [3,1,5,6,7,4,2,8]
A.sort()
M = 9
success = False
print(A)
for i in range(len(A)):
m = M - A[i]
j = binaryFind(A,m)
if j != -1 and j != i:
print("存在i和j使得A[i]+A[j] = {0}".format(M))
success = True
break
if success != True:
print("不存在i和j,使得A[i]+A[j]= {0}".format(M))
运行结果: