题目:
统计一个数字在排序数组中出现的次数。(可能出现重复状况)
代码:
1 class Solution { 2 public: 3 int GetNumberOfK(vector<int> data ,int k) { 4 return CountK(data,k+0.5) - CountK(data,k-0.5); 5 } 6 int CountK(vector<int> data, double num) { 7 int left = 0, right = data.size() - 1; 8 while(left <= right){ 9 int mid = (left + right) /2; 10 if(data[mid] < num) left = mid + 1; 11 else if(data[mid] > num) right = mid - 1; 12 } 13 return left; 14 } 15 };
我的笔记:
由于本题查找的数字可能存在重复的情况,所以在这里将数字区间定为 k-0.5 - k+0.5,后再用二分查找法去寻找,最后将上限返回值 - 下限返回值就可以求得出现次数。