给定一个排序的数字列表,我需要找到大于给定数字的最小数字。考虑这个列表:
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
假设指定的数字是 320。那么,我的方法应该返回 353,因为 353 是大于 320 的最小数字。
我正在尝试使用稍微修改的二进制搜索形式;但是在执行时程序进入无限循环。
def modBinarySearch(arr,x):
l=len(arr)
mid=l/2
if arr[mid]>=x and arr[mid-1]<x:
return arr[mid]
elif arr[mid]>x and arr[mid-1]>x:
modBinarySearch(arr[mid:l],x)
else:
modBinarySearch(arr[0:mid],x)
N=int(raw_input())
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
print modBinarySearch(arr,N)
有人可以指出我做错了什么吗?