37.数字在排序数组出现的次数
题目描述
统计一个数字在排序数组中出现的次数。
解题思路:若忽略数组的特点,可以遍历整个数组,进行累加,但由于时排序数组,我们可以采用二分查找对数字进行查找,由于排序数组中相同的数字都是挨着的,我们找到最左边这个数字的下标,和最右边这个数字右边数字的下标,进行相减就可得出这个数字的个数。
例:1 2 2 3 4
最终会返回第一个2的下标1,3的下标3,3-1=2,所以2的个数为2个。
public int binarySearch(int[] arr,double num)
{
int L=0;
int R=arr.length-1;
while(L<=R)
{
int mid=L+(R-L)/2;
if(num<arr[mid])
R=mid-1;
else if(num>arr[mid])
L=mid+1;
}
return L;
}
public int GetNumberOfK(int [] array , int k) {
if(array==null || array.length==0)
return 0;
return binarySearch(array,k+0.5)-binarySearch(array,k-0.5);
}