数的范围题目
方法:
题解思路
** 数组有序 ==> 我们只需判断数组中间数字(mid = l+r>>1)即可确定所需寻找的数在那一边
(如果在左边或已经找到该数 left = 0 , right = mid)之后只要在(0,mid)范围内寻找
(如果在右边 left = mid+1 , right = 1)之后只要在(mid+1,right)范围内寻找
之后不断递归即可**
int check1(int l,int r){
if(l>=r) return l;
int mid=l+r>>1;
if(q[mid]>=x) check1(l,mid);
else check1(mid+1,r);
}
题解代码
#include<stdio.h>
int n,m;
int q[100000];
int x;
int check1(int l,int r){
if(l>=r) return l;
int mid=l+r>>1;
if(q[mid]>=x) check1(l,mid);
else check1(mid+1,r);
}
int check2(int l,int r){
if(l>=r) return l;
int mid=l+r+1>>1;
if(q[mid]>x) check2(l,mid-1);
else check2(mid,r);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&q[i]);
}
while(m--){
scanf("%d",&x);
int ans1=check1(0,n-1);
if(q[ans1]!=x){
printf("-1 -1\n");
}
else{
printf("%d ",ans1);
int ans2=check2(0,n-1);
printf("%d\n",ans2);
}
}
return 0;
}