题目如下
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
解题代码
思路非常简单,参考前面二分查找数字应该插入的位置,那么找到target-0.5的插入位置,和target+0.5的插入位置,这个区间就是全部的target数量。
#include<iostream>
#include<vector>
using namespace std;
int GetNumberBinary(vector<int>& ivec, double k)
{
int left = 0;
int right = ivec.size() - 1;
while (left <= right)
{
int mid = (right - left) / 2 + left;
if (ivec[mid] > k)
{
right = mid - 1;
}
else if (ivec[mid] < k)
{
left = mid + 1;
}
}
return left;
}
//一个数字在升序数组中出现的次数
int GetNumberOfK(vector<int> data, int k)
{
return GetNumberBinary(data, k + 0.5) - GetNumberBinary(data, k - 0.5);
}
int main()
{
vector<int>vec = { 5,7,7,8,8,10 };
cout << GetNumberOfK(vec, 8) << endl;
return 0;
}