题目:1,2,3,3,3,3,4,5 当key=3时返回4
思路:二分查找
(1)找到key在数组中出现的开始位置和结束位置,用二分查找法
时间复杂度:O(logn
)
def searchFirst(array,key):
start=0
end=len(array)-1
while(start <= end):
mid=(start+end)/2
if(array[mid]==key):
if(array[mid-1]!=key):
return mid
else:
end=mid-1
elif array[mid]>key:
end=mid-1
else:
start=mid+1
def searchLast(array,key):
start=0
end=len(array)-1
while(start <= end):
mid=(start+end)/2
if(array[mid]==key):
if(array[mid+1]!=key):
return mid
else:
start=mid+1
elif array[mid]>key:
end=mid-1
else:
start=mid+1
def searchNum(array,key):
first=searchFirst(array,key)
last=searchLast(array,key)
print last-first+1
if __name__=="__main__":
array=[1,2,3,3,3,3,4,5]
searchNum(array,3)