题目描述
统计一个数字在排序数组中出现的次数。
思路
二分法,分别找出数字的下确界和上确界
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
if not data:
return 0
i = 0
j = len(data)-1
#找下确界
while i<j:
mid = int((i+j+1)//2)
if data[mid]<k:
i = mid
else: # >=k
j = mid-1
if data[i]==k:
left = i-1
else:
left = i
j = len(data)-1
#上确界
while i<j:
mid = int((i+j)//2)
if data[mid] <=k:
i = mid+1
else: #>k
j = mid
if data[j]==k:
j+=1
if j-left-1<0:
return 0
return j-left-1