大家好,今天给大家带来一道特别简单的二分题。先看描述:
描述
请在一个有序递增数组中(不存在相同元素),找出值 x 的位置,如果 x 在数组中不存在,请输出 -1 !
输入描述
第一行,一个整数 n ,代表数组元素个数(n≤5×106)
第二行,n 个数,代表数组的 n 个递增元素(1≤数组元素值≤108)
第三行,一个整数 x ,代表要查找的数(0≤x≤108)
输出描述
x 在数组中的位置,或者 -1。
这道题特别的简单,所以直接上代码:
#include<bits/stdc++.h>
using namespace std;
int a[5000001];//存储有序递增序列
int main(){
int n,m;//n:序列数字个数 m:查找的数字
//cin>>n
scanf("%d",&n);
for(int i=1;i<=n;i++){//下标1~n
//cin>>a[i];
scanf("%d",&a[i]);
}
//cin>>m;
scanf("%d",&m);
int l=1,r=n;//l指向下标1 r指向下标n
while(l<=r){//二分查找
int mid=(l+r)/2;//取中间下标
if(a[mid]==m){//中间值等于查找数字
//cout<<mid;//输出下标
printf("%d",mid);
return 0;//结束程序
}else if(a[mid]>m){//中间数字大于查找数字
r=mid-1;//在序列的左边查找
}else{//中间数字小于查找数字
l=mid+1;//在序列的右边查找
}
}
cout<<-1;//没有查找到数字,输出-1
return 0;
}
最后,这道题在千千蓝鲸
关注我,统统都是干货