题目描述
统计一个数字在排序数组中出现的次数。
题目描述
解题思路
分别通过二分法得到k值最左侧的索引和k值最右侧的索引,然后返回两者的值
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
if len(data)<=0:return 0
start,end = 0,len(data)-1
leftIndex = self.leftSearch(data,k,start,end)
rightIndex = self.rightSearch(data,k,start,end)
return rightIndex - leftIndex+1 if data[leftIndex]== data[rightIndex]==k else 0
def leftSearch(self,data,k,start,end):
if data[start]==k :return start
mid = ((end-start)>>1) + start
while data[mid] != k or data[mid-1]>=k:
if end == start : return start
if data[mid]>=k:
end = mid-1
mid = ((end-start)>>1) + start
elif data[mid]<k:
start = mid +1
mid = ((end-start)>>1) + start
return mid
def rightSearch(self,data,k,start,end):
if data[end] == k:return end
mid = ((end-start)>>1) + start
while data[mid] != k or data[mid+1]<=k:
if end == start : return start
if data[mid]>k:
end = mid - 1
mid = ((end-start)>>1) + start
elif data[mid]<=k:
start = mid + 1
mid = ((end-start)>>1) + start
return mid