题目
分析
通过二分法分别找到两个区间
第一个大于K的数为 right
第一个大于等于K的数为left
如果right大于left,返回right-left
否则返回0
注意右指针的位置一定要等于数组长度,以防发生 所有数都小于等于K的情况
python代码
class Solution:
def GetNumberOfK(self, data, k):
# write code here
l,r = 0,len(data)
while l<r:
mid = (l+r)>>1
if data[mid]<=k:
l = mid +1
else:
r = mid
right = r
l,r = 0,len(data)
while l<r:
mid = (l+r)>>1
if data[mid]<k:
l = mid +1
else:
r = mid
left = r
return right-left if right>=left else 0