public int GetNumberOfK(int [] array , int k) {
       if(array==null||array.length==0) return 0;
       //有序,想到二分,如何用二分来优化?
       //这是数组,如何确定某个数的个数?
       //由于有序,所以这个数出现的位置肯定是连续的,数组的好处在于下标,所以找到上下边界就可以使用下标
       //直接算出个数
       //上界:>=k的最左边,同样也是<k的最右边+1
       //下界:<=k的最右边
       //所以整一个函数,求<=k的最右边(leftEqlMaxRight)就可以了
       int res = leftEqlMaxRight(array,k) - leftEqlMaxRight(array,k-1);
       return res<0?0:res;//左边为负才需要管(没有k在数组中),右边为负没关系,表示0位置是k而已
    }
    public int leftEqlMaxRight(int[] array,int k){
        int l = 0;
        int r = array.length - 1;
        int target = -1;
        while(l<=r){
            int mid = ((r-l)>>>1)+l;
            if(array[mid]<=k){
                //标记,向右继续找
                target = mid;
                l = mid + 1;
            }else{
                r = mid - 1;
            }
        }
        return target;
    }