NC74 数字在升序数组中出现的次数
知识点数组二分
描述
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
数据范围:,数组中每个元素的值满足
要求:空间复杂度 ,时间复杂度
示例1
输入:
[1,2,3,3,3,3,4,5],3
返回值:
4
示例2
输入:
[1,3,4,5],6
返回值:
0
题解
暴力解法
略~
二分解法
#include <bits/stdc++.h>
using namespace std;
int GetNumberOfK(vector<int> data, int k)
{
if (data.size() == 0 || k < data.front() || k > data.back())
{
return 0;
}
int left = 0;
int right = data.size() - 1;
int len = 0;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (data[mid] == k)
{
break;
}
if (k < data[mid])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
int i = mid;
while (i >= left && data[i] == k)
{
len++;
i--;
}
i = mid + 1;
while (i <= right && data[i] == k)
{
len++;
i++;
}
return len;
}