题目描述
统计一个数字在排序数组中出现的次数。
可以用二分查找找出数字在数组的最左端和最右端,找最左端和最右端在方法实现上的区别主要在于对 nums[m] == K 的处理:
- 找最左端令 h = m - 1
- 找最右端令 l = m + 1
public int GetNumberOfK(int [] array , int k) {
int l = getFirstK(array,k);
int h = getLastK(array,k);
return h-l+1;
}
public int getFirstK(int[] array , int k){
int l = 0, h = array.length-1;
while(l<=h){
int mid = l+(h-l)/2;
if(array[mid]>=k)h = mid-1;
else l = mid+1;
}
return l;
}
public int getLastK(int[] array , int k){
int l = 0, h = array.length-1;
while(l<=h){
int mid = l+(h-l)/2;
if(array[mid]>k)h = mid-1;
else l = mid+1;
}
return h;
}
}