1. 题目来源
链接:3672. 数组重排
2. 题目解析
有公式的题目,先推公式,对公式做变型。
题目初始要求 i-a[i] != j-a[j]
,等价于 i-j != a[i]-a[j]
,由于 i < j
,则 i-j<0
,当 a[i]-a[j]>=0
时,式子永远成立。
显然,应该从大到小排序即可。
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n;
int a[N];
int main() {
int T;
scanf("%d", &T);
while (T -- ) {
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) scanf("%d", a + i);
sort(a + 1, a + 1 + n, greater<int>());
for (int i = 1; i <= n; i ++ ) printf("%d ", a[i]);
puts("");
}
return 0;
}