代码源R2A题解
2026-08-27 16:04:34
发布于:山东
给大家介绍一个OJ,代码源,准备CSP-J/S,ICPC/CCPC都可以到这里面找,题目质量很可以,界面也很不错
题目
传送门
给定个整数,求其中最大,次大,和第三大的值的和
对于的数据,,
解析
100%
对个数进行排序,选择最大的三个数求和即可
时间复杂度 ,空间复杂度
考虑能否求最大,次大,和第三大的值,答案当然是可以的,思路如下:
定义三个变量,,
每次遇到一个数()分为种情况:
- 大于,这种情况下最大值变为这个数,次大值变为之前的最大值,第三大值变为之前的第二大值,这里为了记录之前的值,要开个变量存储一下
- 不符合1.但大于,这种情况下最大值不变,次大值变为这个数,第三大值变为之前的第二大值,这里为了记录之前的值,同1.
- 不符合1.2.但大于,这种情况下,最大值不变,次大值不变,第三大值变为这个数
- 不符合1.2.3.不做处理
时间复杂度,空间复杂度
由于对没有影响,所以可以滚动变量存储
时间复杂度,空间复杂度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll x;
ll firstmax, secondmax, thirdmax;
int main() {
cin >> n;
while(n--) {
cin >> x;
if(x > firstmax) {
ll lastfirstmax = firstmax;
firstmax = x;
ll lastsecondmax = secondmax;
secondmax = lastfirstmax;
thirdmax = lastsecondmax;
} else if(x > secondmax) {
ll lastsecondmax = secondmax;
secondmax = x;
thirdmax = lastsecondmax;
} else if(x > thirdmax) {
thirdmax = x;
}
}
cout << firstmax + secondmax + thirdmax;
return 0;
}
这里空空如也



















有帮助,赞一个