题目描述
给出有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;
}