classSolution { public: intGetNumberOfK(vector<int> data ,int k){ if (data.size() == 0) return0; int left = left_bound(data, k); int right = right_bound(data, k); return right - left + 1; }
// 寻找左侧边界的二分查找,左闭右开 intleft_bound(constvector<int>& data, int k){ int l = 0, r = data.size(); while (l < r) { int mid = l + (r - l) / 2; if (data[mid] < k) { l = mid + 1; } elseif (data[mid] > k) { r = mid; } else { r = mid; } } return l; } // 寻找右侧边界的二分查找,左闭右开 intright_bound(constvector<int>& data, int k){ int l = 0, r = data.size(); while (l < r) { int mid = l + (r - l) / 2; if (data[mid] < k) { l = mid + 1; } elseif (data[mid] > k) { r = mid; } else { l = mid + 1; } } return l-1; } };
利用库函数
1 2 3 4 5 6 7 8 9
classSolution { public: intGetNumberOfK(vector<int> data ,int k){ if (data.size() == 0) return0; auto left = lower_bound(data.begin(), data.end(), k); auto right = upper_bound(data.begin(), data.end(), k); return right - left; } };