数字在排序数组中出现的次数 --剑指offer

二分法查找k的位置 然后往前往后遍历。
或者找到第一个k和最后一个k的位置 然后相减 也是用二分查找 只不过在找到k的时候先判断k的前后是不是k 是的话不返回 继续缩小范围 直到确定这个是边上的
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array.length == 0 || array == null){
            return 0;
        }
        int result=find(array,0,array.length-1,k);
        int count=0;
        if(result >= 0){
            count =1;
            int i=result,j=result;
            while (i>=1 && array[i] == array[i-1]){
                count ++;
                i --;
            }
            while (j < array.length-1 && array[j] == array[j+1]){
                count ++;
                j ++;
            }
        }
        return count;
    }

    private int find(int[] array, int left, int right, int k) {
        int mid=0;
        while (left <= right){
            mid=(left+right)>>1;
            if(array[mid] < k){
                left=mid+1;
            }else if (array[mid] > k){
                right = mid-1;
            }else {
                return mid;
            }
        }
        return -1;
    }
}

二分查找的算法: