# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
low=0
high=len(data)-1
mid=(low+high)/2
while low<=high:
mid=(low+high)/2
if data[mid]<k:
low=mid+1
else:
high=mid-1
#mid=(low+high)/2
start=low
low=0
high=len(data)-1
mid=(low+high)/2
while low<=high:
if data[mid]<=k:
low=mid+1
else:
high=mid-1
mid=(low+high)/2
end=high
return end-start+1
题目给出的是一个排序好的数组,k一定是连续的,考虑用二分搜索来找到k有多少。即找到k的开始位置和结束位置。注意二分查找的一些点,例如where判断条件是<=,low和high更新的时候要+1 -1来保证每次范围都在缩小。然后因为要找到开始和结束的位置,当data[mid]==k的时候不能返回,而要继续探索,当要找左边界的时候要接着认为想找的k在左边,右边同理。所以才有第一个循环中if data[mid]>=k: high=mid-1