题目描述
给出有 n 个元素的由小到大的序列,请你编程找出某元素第一次出现的位置。(n<=10^6)
输入
第一行:一个整数,表示由小到大序列元素个数;下面 n 行,每行一个整数;最后一行一个整数 x,表示待查找的元素;
输出
如果 x 在序列中,则输出 x 第一次出现的位置,否则输出-1。
样例输入 复制
5 3 5 6 6 7 6
样例输出 复制
3
参考代码:.
#include<bits/stdc++.h>
using namespace std;
long long a[8000001];
int f(int x,int l,int r)
{
if(l>r)
{
return -1;
}
if(l==r)
{
if(a[l]==x)
{
return l;
}
else return -1;
}
int mid=(l+r)/2;
if(a[mid]==x)
{
return f(x,l,mid);
}
if(a[mid]<x)
{
return f(x,mid+1,r);
}
return f(x,l,mid-1);
}
int main()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>k;
cout<<f(k,1,n);
}