剑指offer-刷题笔记-简单题-JZ53 数字在升序数组中出现的次数
版本1-顺序查找
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size() == 0 || k > data[data.size()-1] || k < data[0])
{
return 0;
}
// int low,high,mid;
// low = 0;
// high = data.size()-1;
// mid = (low + high)/2;
int count = 0;
// if(k > data[data.size()-1] || k < data[0])
// {
// return 0;
// }
for(int i = 0;i<data.size();i++)
{
if(data[i] == k)
{
//顺序表,开始找到的是第一个,从这个位置开始直到重复值结束
while(data[i+count] == k)
{
count += 1;
}
break;
}
// else if(data[mid] < k)
// {
// low = mid + 1;
// }
// else
// {
// high = mid - 1;
// }
}
return count;
}
};
版本2-二分查找
注意
class Solution {
public:
int GetNumberOfK(vector<int> nums ,int target) {
int lbound = 0, rbound = 0;
// 寻找上界
int l = 0, r = nums.size();
while (l < r) {
int mid = l + (r - l) / 2;
//上界刚好是大于target的第一个值
if (nums[mid] < target) {
l = mid + 1;
}
else {
r = mid;
}
}
lbound = l;
// 寻找下界
l = 0, r = nums.size();
while (l < r) {
int mid = l + (r - l) / 2;
//下界刚好是等于target的第一个值
if (nums[mid] <= target) {
l = mid + 1;
}
else {
r = mid;
}
}
rbound = l;
return rbound - lbound;
}
};