题目描述
统计一个数字在排序数组中出现的次数。
题目分析
使用两次折半查找,第一次找第一个k,第二次找最后一个k
Java代码
public int GetNumberOfK(int [] array , int k) {
int start = 0;
int end = array.length - 1;
int first = GetFirstK(array, k,start,end);
int last = GetLastK(array,k,start,end);
int number = 0;
if(first>-1 && last>-1){
number = last - first + 1;
}
return number;
}
public int GetFirstK(int [] array , int k,int start,int end) {
if(start>end){
return -1;
}
int mid = (start+end)>>1;
if(array[mid] == k){
if(mid>0 && array[mid-1]!=k || mid==0){
return mid;
}else{
end = mid-1;
}
}else if(array[mid]>k){
end = mid-1;
}else{
start = mid+1;
}
return GetFirstK(array, k, start, end);
}
public int GetLastK(int [] array , int k,int start,int end) {
if(start>end){
return -1;
}
int mid = (start+end)>>1;
if(array[mid] == k){
if(mid<array.length-1 && array[mid+1]!=k || mid==array.length-1){
return mid;
}else{
start = mid+1;
}
}else if(array[mid]>k){
end = mid-1;
}else{
start = mid+1;
}
return GetLastK(array, k, start, end);
}