题目描述
统计一个数字在排序数组中出现的次数。
解题思路:
通过二分法,分别找出这个数字第一次出现的位置和最后一次出现的位置
python solution:
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
first = self.getfirstk(data,k,0,len(data)-1)
last = self.getlastk(data,k,0,len(data)-1)
# print(first,last)
if first>-1 and last>-1:
return last-first+1
else:
return 0
def getfirstk(self,data,k,start,end):
if start>end:
return -1
mid = (start+end)//2
middata = data[mid]
if middata==k:
if (mid>0 and data[mid-1]!=k) or mid==0:
return mid
else:
end = mid-1
elif middata>k:
end = mid-1
else:
start = mid+1
return self.getfirstk(data,k,start,end)
def getlastk(self,data,k,start,end):
if start>end:
return -1
mid = (start+end)//2
middata = data[mid]
if middata==k:
if (mid<len(data)-1 and data[mid+1]!=k) or mid==len(data)-1:
return mid
else:
start = mid + 1
elif middata<k:
start = mid+1
else:
end = mid-1
return self.getlastk(data,k,start,end)