题意:
一共有
n
n
n 个队员,每个人都有一个内卷值
s
[
i
]
s[i]
s[i],对于每一个队员,找到除去自己之外剩余
n
−
1
n-1
n−1 个人中最大的内卷值
思路:
做法应该会很多,这里只上一个思路比较简单的方法。
第一遍遍历,找到第一个最大值并标记其下标为
j
j
j,除去
j
j
j,剩余
n
−
1
n-1
n−1 个队员对应的答案都应该是最大值;然后第二次遍历找到次大值,即第
j
j
j 个队员对应的答案是次大值
时间复杂度: O ( n ) O(n) O(n)
#include <bits/stdc++.h>
using namespace std;
#define sf(x) scanf("%d",&x)
const int N = 2e5 + 10;
int s[N];
int main() {
int n;
sf(n);
int j = 0, ma = -0x3f3f3f3f;
for (int i = 1; i <= n; i++) {
sf(s[i]);
if (s[i] > ma) {
ma = s[i];
j = i;
}
}
int me = -0x3f3f3f3f;
for (int i = 1; i <= n; i++)
if (i == j)
continue;
else
me = max(me, s[i]);
for (int i = 1; i <= n; i++)
if (i == j)
cout << me << '\n';
else
cout << ma << '\n';
return 0;
}