题目描述
统计一个数字在排序数组中出现的次数。
AC C++ Solution:
思路:先用二分查找找到数字在数组中的位置,然后查找该位置的左右相同的元素.
class Solution {
public:
int searchk(vector<int> data, int lo, int hi, int k) {
while(lo <= hi) {
int mid = (lo+hi)/2;
if(data[mid] == k)
return mid;
else if(data[mid] < k)
lo = mid+1;
else
hi = mid-1;
}
return -1;
}
int GetNumberOfK(vector<int> data ,int k) {
int len = data.size();
if(len == 0)
return 0;
int kindex = 0;
kindex = searchk(data,0,len-1,k);
if(kindex == -1)
return 0;
int cnt = 1;
int m = kindex-1;
int n = kindex+1;
while(m >= 0 && data[m] == k) {
m--;
cnt++;
}
while(n < len && data[n] == k) {
n++;
cnt++;
}
return cnt;
}
};