题目描述
给出有n个元素的由小到大的序列,请你编程找出某元素第一次出现的位置。(n<=106)
输入
第一行:一个整数,表示由小到大序列元素个数:下边n行,每行一个整数:最后一行一个整数x,表示待查找的元素。
输出
如果x在序列中,则输出x第一次出现的位置,否则输出-1.
样例输入 Copy
5 3 5 6 6 7 6
样例输出 Copy
3
哎,也是通过自己的努力把这个题给秒掉了,还是有点开心的啊哈哈哈哈哈哈哈,随便了,虽然是一道很简单的题目。,应该也不会太有成就感
#include<iostream>
#include<algorithm>
using namespace std;
int l, r, n, x, mid;
int a[1000001];
int main()
{
std::cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
l = 1, r = n;
cin >> x;
int flag = 0;
while (l <=r)
{
mid = (l + r) / 2;
if (a[mid] == x)
{
flag = 1;
}
if (a[mid] < x)
{
l = mid+1;
}
if (a[mid] >= x)
{
r = mid;
}
if (l == r&&a[mid]==x)
{
break;
}
}
if (flag == 1)
{
cout << r<<endl;
}
else if (flag == 0)
{
cout << -1 << endl;
}
return 0;
}