题目:
有一段长度为n的序列,q次查找,每次查找输入一个值x,需要你判断序列中是否存在值等于x的元素,若存在,请输出位置最小的x所在的位置,若不存在,请输出-1.
分析:
这些题目都不是很难,中间的道理很简单,就是临界条件这类的不好拿捏。
源码:
include
using namespace std;
int main(void)
{
int n; cin>>n; int arr[n+1]; for(int i=1;i<=n;i++) { cin>>arr[i]; } int q; cin>>q; for(int j=0;j<q;j++) { int x,a=1,b=n; cin>>x; while(x>=arr[1]&&x<=arr[n]&&b-a>=0) { int md=arr[(a+b)/2]; if(x==md) { if(x==arr[(a+b)/2-1]) { b=(a+b)/2-1; }else { cout<<(a+b)/2<<endl; a=-1; break; } }else if(x>md) { a=(a+b)/2+1; }else if(x<md) { b=(a+b)/2-1; } } if(a==1) { cout<<-1<<endl; } } return 0;
}