//二分法
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        int length = array.length;
        //特殊值处理
        if(length == 0){
            return 0;
        }
        int min = 0;//二分法,最小值下表
        int max = length-1;//二分法,最大值下表
        int mid = (min + max)/2;//二分法,中值下表
        while(min <= max){//循环结束条件:最小值大于最大值(显然不合理)
            if(array[mid] == k){//找出相等的值得索引
                break;
            }else if(array[mid] > k){//中值比目标值(k)大,搜索范围应该在【min,mid-1】中
                max = mid-1;
            }else{//中值比目标值(k)小,搜索范围应该在【mid+1,max】中
                min = mid+1;
            }
            mid = (min + max)/2;//求中值
        }
        //最小值大于最大值(显然不合理),说明没有要查找的值
        if(min>max){
            return 0;
        }
        int left = mid;
        int right = mid;
        //往左边遍历查找第一个不是目标值(k)的下标索引
        while(left >= 0 && array[left] == k){
            left--;
        }
        //往左边遍历查找第一个不是目标值(k)的下标索引
        while(right <= length-1 && array[right] == k){
            right++;
        }
        
        return right-left-1;
    }
}