剑指offer 数字在排序数组中出现的次数
问题描述
统计一个数字在排序数组中出现的次数。
C++代码实现
思路:有序数组中,使用二分法找到目标值得上界和下界,做差即可
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int lbound = 0, rbound = 0;
int l = 0, r = data.size();
while (l < r)
{
int mid = l + ((r - l) >> 1);
if (data[mid] < k)
{
l = mid + 1;
}
else
{
r = mid;
}
}
lbound = l;
l = 0, r = data.size();
while (l < r)
{
int mid = l + ((r - l) >> 1);
if (data[mid] <= k)
{
l = mid + 1;
}
else
{
r = mid;
}
}
rbound = l;
return rbound - lbound;
}
};
python2代码实现
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
lbound = 0
rbound = 0
l = 0
r = len(data)
while l < r:
mid = l + ((r - l) >> 1)
if data[mid] < k:
l = mid + 1
else:
r = mid
lbound = l
l = 0
r = len(data)
while l < r:
mid = l + ((r - l) >> 1)
if data[mid] <= k:
l = mid + 1
else:
r = mid
rbound = l
return rbound - lbound