这道题与search for a range相似,都是用两次binary search去找左右边界。如果边界找不出来时候返回0。注意最后right-left要加1
class Solution:
# @param {int[]} A an integer array sorted in ascending order
# @param {int} target an integer
# @return {int} an integer
def totalOccurrence(self, A, target):
# Write your code here
if not A:
return 0
start, end = 0, len(A)-1
left = 0
while start+1 < end:
mid = (start+end)/2
# 左边界
if target > A[mid]:
start=mid
else:
end = mid
if target == A[start]:
left = start
elif target == A[end]:
left = end
else:
return 0
start,end = 0,len(A)-1
right = 0
while start+1 < end:
mid = (start+end)/2
# 右边界
if target >= A[mid]:
start=mid
else:
end = mid
if target == A[end]:
right = end
elif target == A[start]:
right = start
else:
return 0
return right - left + 1