题目描述
统计一个数字在排序数组中出现的次数。
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
count=1
mlen=len(data)
index=self.BinarySearch(data,mlen,k)
if index==-1:
return 0
for i in range(1,mlen):
if index-i>=0 and data[index-i]==k:
count+=1
if index+i<mlen 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
利用二分法求出,中点为k的序号,再向前向后遍历。
疑问在:if index+i<mlen and data[index+i]==k :中 and前后不能调换位置,否则会出现list index out of range的错误。