题目:统计一个数字在排序数组中出现的次数。
由于是排序数组,考虑二分查找的思想。时间复杂度O(lgn).
代码如下:
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
return GetNumberOfK(data,0,data.size()-1,k);
}
int GetNumberOfK(vector<int>& data,int left,int right,int k)
{
if(left>right)
return 0;
if(left==right)
{
if(data[left]==k)
return 1;
else
return 0;
}
int mid=(right+left)/2;
if(data[mid]<k)
return GetNumberOfK(data,mid+1,right,k);
else if(data[mid]>k)
return GetNumberOfK(data,left,mid,k);
else
return GetNumberOfK(data,left,mid-1,k)+GetNumberOfK(data,mid+1,right,k)+1;
}
};