Total Occurrence of Target
Given a target number and an integer array sorted in ascending order. Find the total number of occurrences of target in the array.
Example
Given[1, 3, 3, 4, 5]
and target =3
, return2
.
Given[2, 2, 3, 4, 6]
and target =4
, return1
.
Given[1, 2, 3, 4, 5]
and target =6
, return0
.
可以用hashmap做,但是宁愿做两次二分法,也强过做while搜索,因为做while搜索最坏情况下复杂度可以达到O(n)
这道题与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
Last updated
Was this helpful?