题目:统计一个数字在排序数组中出现的次数,例如 {1,2,3,3,3,3,4,5},3 出现了4次 。
代码解决
#include<stdio.h>
int s[8]={1,2,3,3,3,3,4,5};
int findfirst(int x){
int left = 0, right = 7;
while(left <= right){
int mid = (left + right)/2;
if(s[mid] == x){
if((mid <= 0) || s[mid-1] != x) return mid;
right = mid - 1;
}
else if(s[mid] > x)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
int findlast(int x){
int left = 0, right = 7;
while(left <= right){
int mid = (left + right)/2;
if(s[mid] == x){
if((mid >= 7) || s[mid+1] != x) return mid;
left = mid + 1;
}
else if(s[mid] > x)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
void Print(int x){
int first = findfirst(x);
int last = findlast(x);
if(last ==-1 || first == -1) printf("%d 不存在\n",x);
else
printf("%d 出现了 %d 次\n",x, findlast(x) - findfirst(x)+1);
}
int main(){
int x = 3;
Print(x);
x = 5;
Print(x);
x = 6;
Print(x);
}
结果