解法1:利用二分查找方法找到k第一次出现的位置,如果k大于中间值,则k在中间值的右面,如果小于中间值,则k在中间值的左面,k等于中间的话,直接返回,然后向两边扩展进行计数!
class Solution:
def GetNumberOfK(self, data, k):
# write code here
mlen = len(data)
index = self.BinarySearch(data,mlen,k)
if index == -1:
return 0
count = 1
for i in range(1,mlen):
if index + i < mlen and data[index+i] == k:
count += 1
if index - i >= 0 and data[index-i] == k:
count += 1
return count
def BinarySearch(self,data,mlen,k):
start = 0
end = mlen - 1
while start <= end:
mid = (start+end)/2
if data[mid] < k:
start = mid+1
elif data[mid] > k:
end = mid-1
else:
return mid
return -1