Total Occurrence of Target
Description
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
.
Challenge
Time complexity in O(logn)
Related problems
Search for a Range
Implementation
Link: http://lintcode.com/en/problem/total-occurrence-of-target/
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.size() == 0) return 0;
int start = 0, end = A.size() - 1;
// find the 1st
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] == target) {
end = mid;
} else if(A[mid] < target) {
start = mid;
} else {
end = mid;
}
}
int first = -1;
if(A[start] == target) {
first = start;
} else if(A[end] == target) {
first = end;
} else {
return 0;
}
// find the last
start = 0;
end = A.size() - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] == target) {
start = mid;
} else if(A[mid] < target) {
start = mid;
} else {
end = mid;
}
}
int last = -1;
if(A[end] == target) {
last = end;
} else if(A[start] == target) {
last = start;
} else {
return 0;
}
return last - first + 1;
}
};