/*
思路:
1,使用map,逐个计算
2,使用二分法,找到data[mid] = k,然后将mid向左右扩展,找到相同的值。
这样的简单题应该使用更多的方法来挑战一下。
*/
class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        int len = data.size();
        if (len == 0 || data[0] > k || data[len-1] < k) {
            return 0;
        }
        int left = 0, right = len - 1;
        while(left <= right) {
            int mid = (left + right) / 2;
            if (data[mid] > k) {
                right = mid - 1;
            } else if (data[mid] < k) {
                left = mid + 1;
            } else {
                int leftIndex = mid, rightIndex = mid;
                while(leftIndex >= left && data[leftIndex - 1] == data[leftIndex]) {
                    leftIndex--;
                }
                while(rightIndex <= right && data[rightIndex + 1] == data[rightIndex]) {
                    rightIndex ++;
                }
                return rightIndex - leftIndex + 1;
               
            }
        }
        return 0;
    }
};