题目描述
统计一个数字在排序数组中出现的次数。
解题思路:这个比较基础,没什么好说的。考察容器遍历
参考代码:(时间复杂度O(n))
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if (data.empty())
return 0;
int count = 0;
for (int i = 0; i < data.size(); ++i) {
if (k == data[i])
count++;
}
return count;
}
};
优化代码:(时间复杂度O(logn))
//使用二分法查找到该数
//向左向右计数
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if (data.empty())
return 0;
int count = 0;
int left = 0;
int right = data.size()-1;
int mid = left + (right-left)/2;
for (int i = 0; i < data.size(); ++i) {
if (data[mid] < k)
{
left = mid;
mid = left + (right-left)/2;
} else if(data[mid] > k)
{
right = mid;
mid = left + (right-left)/2;
} else {
break;
}
}
int index_l = mid;
int index_r = mid+1;
while (data[index_l] == k || data[index_r] == k)
{
if (data[index_l] == k)
{
count++;
index_l--;
}
if (data[index_r] == k)
{
count++;
index_r++;
}
}
return count;
}
};