解法一:手写二分法查找
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array==null||array.length==0) return 0;
int p=find(array, k, 0, array.length-1);
if(p==-1) return 0;
int q=p;
int ans=1;
while(p-1>=0&&array[p-1]==array[p]) {ans++;p--;}
while(q+1<=array.length-1&&array[q]==array[q+1]) {ans++;q++;}
return ans;
}
int find(int[] array, int k, int l, int r){
if(l==r&&array[l]!=k) return -1;//单独删除这一行 会有数组越界问题
if(l+1==r&&array[l]!=k&&array[r]!=k) return -1;;//单独删除这一行 会有数组越界问题
int m=(l+r)/2;
if(array[m]==k) return m;
if(array[m]<k) return find(array, k, m, r);
return find(array, k, l, m);
}
}
解法二:库函数binarySearch
import java.util.Arrays;
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int index = Arrays.binarySearch(array, k);
if(index<0)return 0;
int ans = 1;
for(int i=index+1; i < array.length && array[i]==k; i++)
ans++;
for(int i=index-1; i >= 0 && array[i]==k; i--)
ans++;
return ans;
}
}