题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
// 找到第一次出现数字的位置
if(!data.size())
return 0;
int first = Search(data ,k);
int last = Search(data , k+1);
if(data[first] != k || first == data.size())
return 0;
return last-first;
}
int Search(vector<int> data ,int k)
{
int n = data.size();
// e.g:[2,2],2.在找k+1(3)这个数字的时候,希望返回数组最后一个位置再往后一个位置,这样相减才能覆盖对
int l = 0, r = n;
while(l < r)
{
int mid = (l+r)/2;
if(data[mid]<k)
l = mid+1;
// 左区间应该包含 m 位置
else
r = mid;
}
return l;
}
};