题目描述
统计一个数字在排序数组中出现的次数。
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array==null || array.length==0) return 0;
int leftIndex = getFirstK(array,k);
int rightIndex = getLastK(array,k);
if(leftIndex!=-1&&rightIndex!=-1)
return rightIndex - leftIndex + 1;
return 0;
}
public int getFirstK(int[] array,int k){
int left = 0;
int right = array.length - 1;
while(left<=right){
int mid = left + ((right-left)>>1);
if(array[mid]==k){
if(mid==0 || (mid>0&&array[mid-1]!=k))
return mid;
right = mid - 1;
}
else if(array[mid]>k)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
public int getLastK(int[] array,int k){
int left = 0;
int right = array.length - 1;
while(left<=right){
int mid = left + ((right-left)>>1);
if(array[mid]==k){
if(mid==array.length-1 || (mid<array.length-1&&array[mid+1]!=k))
return mid;
left = mid + 1;
}
else if(array[mid]>k)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
}