您的位置:首页 > 其它

数字在排序数组中出现的次数

2015-09-01 22:28 218 查看
采用二分查找的方法,一旦找到,left++,right--,--middle++,扩展查找。

开始while(left<right),当n=1时不能进入循环,应写while(left<=right)

class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int n=data.size();
if(n<1) return 0;
int left=0;
int right=n-1;
int middle=0;
int count=0;
while(left<=right){
if(data[left]==k){
while(data[left]==k&&left<n){
left++;
count++;
}
return count;
}
if(data[right]==k){
while(data[right]==k&&right>=0){
right--;
count++;
}
return count;
}
middle=left+(right-left)/2;
if(data[middle]==k){
count++;
int m=middle-1;
while(data[m]==k&&m>=0){
m--;
count++;
}
m=middle+1;
while(data[m]==k&&m<n){
m++;
count++;
}
return count;
}
if(data[middle]>k)
right=middle-1;
else
left=middle+1;
}
return count;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: