A30720 输出最大数位置 题解
2026-08-28 11:08:42
发布于:山西
4阅读
0回复
0点赞
题意简述
输入整数n,再输入n个整数存入数组a[1]~a[n],输出数组中最大数所在的下标位置。
数据范围:。
注意数组下标从1开始;如果有多个相同最大值,输出最先出现的那个位置。
解题思路
- 读入n,接着读入n个数字存入数组,数组下标从1开始。
- 设置两个变量:
max_val保存当前找到的最大值,pos保存最大值对应的位置。 - 初始化:把数组第一个元素
a[1]赋值给max_val,pos初始化为1。 - 循环从下标2遍历到n:
- 如果当前
a[i] > max_val,说明找到更大的数字。 - 更新
max_val = a[i],同时更新pos = i。 - 如果等于当前最大值,不做处理,保留最先出现的下标。
- 如果当前
- 遍历全部元素结束,直接输出pos。
样例推演
输入:
5
67 43 90 78 32
数组:a[1]=67,a[2]=43,a[3]=90,a[4]=78,a[5]=32
- 初始max_val=67,pos=1
- i=2:43<67,不更新
- i=3:90>67 → max_val=90,pos=3
- i=4:78<90,不更新
- i=5:32<90,不更新
输出pos=3,和样例输出一致。
复杂度分析
- 时间复杂度:\(O(n)\),只遍历数组一遍。n最大10000,运算量很小,不会超时。
- 空间复杂度:\(O(n)\),存储n个数字;也可以不存完整数组,边读边判断,优化到\(O(1)\)。
易错点
- 下标从1开始,不要当成0下标,否则输出位置全部错1。
- 多个数字同为最大值时,输出第一次出现的下标,条件要写
a[i]>max_val,不要写成>=,写成>=会取最后一个最大值位置。 - 初始化不能把max_val设置成0,输入数字可能全部是负数,会导致结果错误,必须用数组第一个元素初始化。
优化思路(不开数组)
不需要把全部数字存进数组。读一个数就比较一次,维护最大值和位置,节省内存。
流程:读n;max_val读第一个数字,pos=1;循环i从2到n,读入临时数字x,如果x>max_val就更新max_val与pos;循环结束输出pos。适合n很大的场景。
总结
本题一维数组基础题,核心是遍历比较,记录最大值和它的下标。重点注意下标起点、相等元素的处理、初始化的正确写法。
最后,来看代码
#include<iostream>
using namespace std;
int main(){
int a,b,c=2,d=1,e;
cin>>e>>a;
while(cin>>b){
if(b>a){
a=b;
d=c;
}
c++;
}
cout<<d;
}
这里空空如也







有帮助,赞一个