题目描述
统计一个数字在排序数组中出现的次数。
解法:
二分查找,找完数数,值得注意的是二分查找的区间不要弄错,不然将会陷入死循环,实现代码如下:
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array == null||array.length == 0){
return 0;
}
if(k > array[array.length - 1]||k < array[0]) {
return 0;
}
int index = search(array,0,array.length,k);
int count = 0;
if(index == -1){
return 0;
}
for(int i = index + 1;i < array.length;i++){
if(array[i] == k){
count++;
}
}
for(int i = index - 1;i >= 0;i--){
if(array[i] == k){
count++;
}
}
return count + 1;
}
//二分查找
public int search(int[] array,int start,int end,int k){
int mid = (start + end)>>1;
if(start > end){
return -1;
}
if(array[mid] > k){
return search(array,start,mid - 1,k);
}
else if (array[mid] < k){
return search(array,mid + 1,end,k);
}
else if(array[mid] == k){
return mid;
}
return -1;
}
}