题目中要求时间复杂度O(logn),所以直接用二分查找。
总体思路是通过二分查找找到要找的数,然后在查找该数周围相同的数,最后返回累计计数。复杂度满足题目要求。
因为写完一次过了,所以代码结构还有较大调整空间。

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        int count = 0;
        int index;
        int left = 0;
        int right = data.size() - 1;
        while(right >= left){
            int mid = left + (right - left)/2;
            if(data.at(mid) == k){
                index = mid;
                break;
            }
            else if(data.at(mid) > k){
                right = mid - 1;
            }
            else{
                left = mid + 1;
            }
        }
        if(right < left){
            return 0;
        }
        for(int i = index;i < data.size();i++){
            if(data.at(i) == k){
                count++;
            }
            else{
                break;
            }
        }
        if(index > 0){
            for(int i = index - 1;i >= 0;i--){
                if(data.at(i) == k){
                    count++;
                }
                else{
                    break;
                }
            }
        }
        return count;
    }
};