题目描述
统计一个数字在排序数组中出现的次数。
思路:排序数组要想二分查找
剑指解法:
由于数组有序,所以使用二分查找方法定位k的第一次出现位置和最后一次出现位置
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
number = 0
if data!=None and len(data)>0:
length = len(data)
first = self.GetFirstK(data,length,k,0,length-1)
last = self.GetLastK(data,length,k,0,length-1)
if first>-1:
number = last - first + 1
return number
def GetFirstK(self,data,length,k,start,end):
if start>end:
return -1
middleIndex = (start+end)//2
middleData = data[middleIndex]
if middleData ==k:
if middleIndex>0 and data[middleIndex-1]==k:
end = middleIndex-1
else:
return middleIndex
elif middleData>k:
end = middleIndex-1
else:
start = middleIndex+1
return self.GetFirstK(data,length,k,start,end)
def GetLastK(self,data,length,k,start,end):
if start>end:
return -1
middleIndex = (start+end)//2
middleData = data[middleIndex]
if middleData==k:
if middleIndex<end and data[middleIndex+1]==k:
start = middleIndex+1
else:
return middleIndex
elif middleData>k:
end = middleIndex-1
else:
start = middleIndex+1
return self.GetLastK(data,length,k,start,end)