解法一:手写二分法查找

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;

    }
}