时间限制:1秒 空间限制:32768K
本题知识点: 数组
题目描述
统计一个数字在排序数组中出现的次数。
/*思路:
*查找有序数组,就先想到了二分进行查找,然后从查找的点进行
*双向遍历进行统计出现的次数
*/
代码:
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size() == 0)
return 0;
if(data.size() == 1){
if(data[0] == k)
return 1;
else
return 0;
}
int l = 0;
int r = data.size() - 1;
int mid = 0;
int cnt = 0;
while(l < r){
mid = l + (r - l) / 2;
if(k > data[mid])
l = mid + 1;
else if(k < data[mid])
r = mid - 1;
else{
cnt++;
break;
}
}
int i = mid - 1;
int j = mid + 1;
while(i >= 0 && data[i] == k){
cnt++;
i--;
}
while(j < data.size() && data[j] == k){
cnt++;
j++;
}
return cnt;
}
};