1 条题解
-
1
小明看书(LRX1)题解
这是一道入门级数组遍历题目,核心需求:找到数组中第一个最小值,输出它的位置(从1开始计数)和数值。
解题思路
- 输入处理:先读入书的数量
n,再读入n本书的页数数组。 - 遍历找最小值:
- 初始化:把第一本书作为初始最小值,位置记为1。
- 从第二本书开始遍历,如果遇到比当前最小值更小的数,更新最小值和对应位置。
- 注意:如果数值相等,不更新(保留第一个出现的)。
- 输出结果:输出最小值的位置和数值。
完整代码(C++)
#include <iostream> #include <vector> using namespace std; int main() { // 加速输入输出(应对n=1e5的大数据量) ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<long long> a(n); // 用long long防止数值溢出 for (int i = 0; i < n; ++i) { cin >> a[i]; } // 初始化:第一个数为最小值,位置是1(题目从1开始计数) int min_pos = 1; long long min_val = a[0]; // 遍历数组找第一个最小值 for (int i = 1; i < n; ++i) { if (a[i] < min_val) { min_val = a[i]; min_pos = i + 1; // 数组下标从0开始,位置+1 } } // 输出结果 cout << min_pos << " " << min_val << endl; return 0; }代码解释
-
输入加速
ios::sync_with_stdio(false); cin.tie(nullptr);:针对n≤1e5的大数据量,加快输入输出速度,避免超时。 -
数据类型 用
long long存储页数:题目中页数最大为1e9,int也能存,但long long更安全,无溢出风险。 -
核心遍历逻辑
- 数组下标从
0开始,题目要求位置从1开始,所以最终位置要+1。 - 只有严格小于当前最小值时才更新,保证保留第一个出现的最小值。
- 数组下标从
样例演示
输入:
5 2 4 12 3 18- 初始最小值:
2,位置1 - 遍历后续数字:
4、12、3、18都比2大,不更新 - 输出:
1 2
边界情况测试
- 只有1本书
输入:
1 100→ 输出:1 100 - 最小值在最后
输入:
3 5 3 2→ 输出:3 2 - 多个相同最小值
输入:
4 2 1 1 3→ 输出:2 1(保留第一个)
总结
- 核心:遍历数组找第一个最小值,位置从1开始计数。
- 关键:相等值不更新,保证输出第一个最小值。
- 优化:大数据量必须加输入加速,避免超时。
- 输入处理:先读入书的数量
- 1
信息
- ID
- 601
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 46
- 已通过
- 13
- 上传者