二分查找的变形,分别查找左面等于K的值,和右面等于K的值
def getNumOfK(data,k):
left=0
right=len(data)-1
leftK=getLeftK(data,k,left,right)
rightK=getRightK(data,k,left,right)
print(leftK)
print("right",rightK)
return rightK-leftK+1
def getLeftK(data,k,left,right):
while left<=right:
middle=(left+right)//2
print("middle",data[middle])
if data[middle]<k:
left=middle+1
else:
right=middle-1
return left
def getRightK(data,k,left,right):
while left<=right:
middle=(left+right)//2
if data[middle]<=k:
left=middle+1
else:
right=middle-1
return right
if __name__=="__main__":
data=[1,2,3,3,3,3,4,5]
k=3
print(getNumOfK(data,k))