• 二分法找到当前数字在数组中的位置;
  • 基于该位置左右遍历,找到相同数字的个数。
class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        int left = 0;
        int right = data.size();
        int result = 0;
        while (left < right) {
            int mid = left + ((right - left) / 2);
            if (data[mid] < k) {
                left = mid + 1;
            }
            else if (data[mid] > k) {
                right = mid;
            }
            else {
                for (int i = mid; i < data.size() && data[i] == k; i++) {
                    result++;
                }
                for (int i = mid - 1; i >= 0 && data[i] == k; i--) {
                    result++;
                }
                return result;
            }
        }
        return 0;
    }
};