二分查找
输入N(N<=10^6)个从小到大有序数,用二分查找给定数M是否存在,若存在输出从左向右第一次出现此数的序号,若无此数输出0;
输入格式:
第一行而个整数n,m
第二行n个整数
输出格式:
从左向右第一次出现m的序号,若无此数输出0
样例输入:
7 4 1 2 4 4 5 7 9
样例输出:
3
时间限制:
1000
空间限制:
65536
#include<bits/stdc++.h>
using namespace std;
int a[1000001];
int main(){
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<n;i++){
cin>>a[i];
}
int l=1,r=n,mid;
while(l<=r){
mid=(l+r)/2;//计算中间值
if(a[mid]==m&&a[mid-1]!=m){//中间值就是所找的答案
ans=mid;
break;
} //找到答案
else if(a[mid]>m||a[mid]==m){//中间值比答案大
r=mid-1;
}
else{
l=mid+1;
}
}
//while(ans-1>=1&&a[ans-1]==m) ans--;
cout<<ans;
return 0;
}