无序序列线性扫描,找到目标值第一次出现的位置并输出下标,未找到输出 -1。
OJ: roj
题目 ID: 1110
难度:入门
标签:线性查找模拟
创建: 2026-09-29 19:14
更新: 2026-10-05 01:41
题目描述
在一个下标从 -1。
样例输入 5、2 3 6 7 3、3,输出 2。
思路
序列无序,不能二分,只能从左到右线性扫描:遇到的第一个等于 -1;注意下标从
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-01-09 10:00
# update_at: 2026-01-09 10:00
import sys
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
n = next(data)
a = [next(data) for _ in range(n)]
x = next(data)
# next + enumerate 在找到第一个匹配值时立刻短路,下标保持从 1 开始。
pos = next((i for i, v in enumerate(a, 1) if v == x), -1)
print(pos)
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 01:40
* update_at: 2026-10-05 01:40
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 10005;
int seq[MAXN]; // seq[i] 存序列第 i 个元素,下标从 1 开始与题面一致
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll n, x;
cin >> n;
for (ll i = 1; i <= n; i++) {
cin >> seq[i];
}
cin >> x;
// 序列无序,只能从左到右线性扫描,遇到的第一个匹配即“第一次出现”的位置
ll answer = -1;
for (ll i = 1; i <= n; i++) {
if (seq[i] == x) {
answer = i;
break;
}
}
cout << answer << "\n";
return 0;
}