37、数字在排序数组中出现的次数
程序员文章站
2024-03-20 12:51:34
...
(个人水平有限,请见谅!)
题目描述:
统计一个数字在排序数组中出现的次数。
代码示例:
// 二分找到第一次出现和最后一次出现更优
// 以下本人胡乱写的代码,相比于暴力**只有小小的优化
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if (data.size() == 0)
return 0;
int left = 0, right = data.size()-1;
while (left<right)
{
int mid = (left+right)/2;
if (data[mid] < k)
left = mid+1;
else if (data[mid] > k)
right = mid-1;
else
break;
}
int count = 0;
for (int i = left; i <= right; i++)
{
if (data[i] == k)
count++;
if (data[i] > k)
break;
}
return count;
}
};
// 参考drdr同学的代码
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if (data.size() == 0)
return 0;
return biSearch(data,k+0.5) - biSearch(data,k-0.5);
}
int biSearch(vector<int>& data, float num)
{
int s = 0, t = data.size()-1;
while (s <= t)
{
int mid = (s+t)/2;
if (data[mid] < num)
s = mid + 1;
else if (data[mid] > num)
t = mid - 1;
}
return s;
}
};
上一篇: 实现折半查找(二分查找)
下一篇: 02:二分法求函数的零点