當元素不存在或太大時,程式IndexError: list index out of range在無限排序陣列中進行二分搜索
def binarySearch(l,ele,low=0,high=None):
if(high==None):
high=len(l)-1
if(low>high):
return -1
mid= int((low high)/2)
pEle = l[mid]
if(pEle==ele):
return mid
elif(pEle>ele):
return binarySearch(l,ele,low,mid-1)
else:
return binarySearch(l,ele,mid 1,high)
# This is a function that searches elements in an infinite sorted array
# l=array;ele=element
def binarySearchInfiniteSortedArray(l,ele):
low,high=0,1
while(True):
pEle = l[high]
if(pEle==ele):
return high
elif(pEle>ele or pEle==l[-1]):
break
else:
low,high = high 1,high*2
return binarySearch(l,ele,low,high)
uj5u.com熱心網友回復:
的值high在每個回圈中加倍,當 的值high大于或等于它給出的串列長度時IndexError: list index out of range
def binarySearchInfiniteSortedArray(l,ele):
low,high=0,1
while(True):
try:
pEle = l[high]
except:
high = int((high**0.5)*(low**0.5))
continue
if(pEle==ele):
return high
elif(pEle>ele or pEle==l[-1]):
break
else:
low,high = high 1,high*2
return binarySearch(l,ele,low,high)
一旦出現錯誤,我們就可以嘗試high,low除非您再次位于范圍內或得到答案,否則會得到 和 的幾何平均值。希望我的觀點很清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359116.html
下一篇:通過非常量,不斷地調整陣列的大小
