题目名字
题意
输入n个数,在n个数里面找出m个数的位置然后输出,如果找不到,就输出-1;
思路
- 先输入n个数
- 直接进行while(m–)来循环输入x,并进行二分查找,如果能找到这个数的话,就输出-1;,并用continue,这样就不会继续下面的输出这个数了,如果找的这个数直接输出l
坑点
- 查找过程中,是要找到第一次出现的额数,所以输出l,如果直接输出mid的话不能确定是不是这个数第一次出现的位置
算法一:二分
代码
#include<iostream>
using namespace std;
const int N=1000010;
int a[N],x,m,n;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
while(m--)
{
cin>>x;
int l=1,r=n;
while(l<r)
{
int mid=l+r>>1;
if(a[mid]>=x) r=mid;
//判断条件,如果值大于等于目标值,说明在目标值右边,尽量往左来
else l=mid+1;
}
if(a[l]!=x){ //如果找不到这个值
cout<<-1<<" ";
continue;
}
cout<<l<<" ";
}
return 0;
}