题意 :
- 给一数组,每次可以将最小数从数列去除且其他所有数减去这个最小数,求过程中最大的最小数
思路 :
- 由于每次减同一个值,所以不会影响剩下元素的相对大小,也就是每次最小的数已经确定了,因此先从小到大排序,然后直接模拟即可
- 每次模拟时不需要遍历让后面的数都减一遍,直接一个变量记录减的前缀和即可
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll a[N];
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int _;
cin >> _;
while (_ -- )
{
int n;
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
if (n == 1)
{
cout << a[1] << endl;
continue;
}
sort(a + 1, a + n + 1);
ll tag = 0, mx = 0;
for (int i = 1; i <= n; i ++ )
{
a[i] -= tag;
mx = max(mx, a[i]);
tag += a[i];
}
cout << mx << endl;
}
return 0;
}