Given a target number and an integer array sorted in ascending order. Find the total number of occurrences of target in the array.
Have you met this question in a real interview?
Yes
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.
Time complexity in O(logn)
class Solution {
public:
/**
* @param A an integer array sorted in ascending order
* @param target an integer
* @return an integer
*/
int totalOccurrence(vector<int>& A, int target) {
// Write your code here
if (A.empty())
return 0;
// find first element
int start = 0, end = A.size() - 1;
while (start + 1 < end) {
int mid = start + (end - start >> 1);
if (A[mid] < target)
start = mid;
else
end = mid;
}
int first, last;
if (A[start] == target)
first = start;
else if (A[end] == target)
first = end;
else
first = -1;
// find last element
start = 0, end = A.size() - 1;
while (start + 1 < end) {
int mid = start + (end - start >> 1);
if (A[mid] > target)
end = mid;
else
start = mid;
}
if (A[end] == target)
last = end;
else if (A[start] == target)
last = start;
else
last = -1;
if (first != -1)
return last - first + 1;
return 0;
}
};