有n个正整数,已知它们按因数个数的多少从小到大排列;在因数个数相同的情况下,两个数按它们的值从小到大排序。现在,我们想找到所有因数个数等于x的数中最大的一个数,该如何解决,使用二分查找的思想
既然已经知道排序,那就从中间考试找:
1、首先找到序号为n/2的数,对他进行因数分解,看看其因数数量是否等于x,如果小于或者等于,就确定答案在右边,然后在[n/2,n]区间里边再次使用二分法;如果因数大于x,那么答案就在左边,就在[1,n/2]范围使用二分法继续找。
2、逐渐缩小范围,直到剩下最后一个数,就是你要找的数
def binary_search(l1, item):
low = 0
high = len(l1) - 1
while low <= high:
mid = int((low + high) / 2)
guess = l1[mid]
if guess == item:
return mid
if guess > item:
high = mid -1
else:
low = mid + 1
return None
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, -1))
不知道你这个问题是否已经解决, 如果还没有解决的话: