Given a target number and an integer array sorted in ascending order. Find the total number of occurrences of target in the array.
Example
Example1:
Input: [1, 3, 3, 4, 5] and target = 3,
Output: 2.
Example2:
Input: [2, 2, 3, 4, 6] and target = 4,
Output: 1.
Example3:
Input: [1, 2, 3, 4, 5] and target = 6,
Output: 0.
Challenge
Time complexity in O(logn)
思路:先find到target index,如果-1直接return 0.否则再统计;
public class Solution {
/**
* @param A: A an integer array sorted in ascending order
* @param target: An integer
* @return: An integer
*/
public int totalOccurrence(int[] A, int target) {
if(A == null || A.length == 0) {
return 0;
}
int i = findLastIndex(A, target);
if(i == -1) {
return 0;
}
int count = 0;
while(i >= 0) {
if(A[i] == target){
count++;
i--;
} else {
break;
}
}
return count;
}
private int findLastIndex(int[] A, int target) {
int start = 0; int end = A.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] <= target) {
start = mid;
} else {
end = mid;
}
}
if(A[end] == target) {
return end;
}
if(A[start] == target){
return start;
}
return -1;
}
}