题解
分数最高的同学
1 条题解
-
0
解题思路
题目要我们在一群同学里找出分数最高的那一位,输出他的名字。
做法可以想象成打擂台:
- 准备两个变量:
best存"当前擂主的姓名",maxs存"当前最高分"。 - 一开始擂台上没有人,把
maxs设成一个特别小的数(比如 -1)。这样第一个同学一上场,score > maxs一定成立,他就能当上擂主。 - 依次读入每个同学的姓名和分数。如果这个分数比
maxs大,说明来了一位更强的擂主,就更新best和maxs。 - 注意我们用
>而不是>=:当分数一样时,我们先看见的同学继续当擂主,也就是"同分时保留先出现的"。 - n 个人都比完,输出擂主
best的姓名。
参考代码
// 分数最高的同学:读入n个人的姓名和分数,输出分数最高者的姓名 #include <iostream> #include <string> using namespace std; int main(){ int n; cin>>n; string name,best; // best存当前最高分同学的姓名 int score,maxs=-1; for(int i=0;i<n;i++){ cin>>name>>score; // 读入姓名和分数 if(score>maxs){ // 分数更高才更新(同分保留先出现的) maxs=score; best=name; } } cout<<best<<'\n'; return 0; }复杂度分析
- 时间复杂度:O(n),n 组数据。每组数据只做一次比较和一次更新,都是常数时间。
- 空间复杂度:O(1)。我们只需要记住当前的最高分和对应姓名,不需要把 n 个人的数据全部存下来。
- 准备两个变量:
- 1