题目大意:每次找到序列的最小值,删除最小值,然后剩余所有元素减去该值,反复执行这个操作,直到序列就剩一个元素,问反复执行该操作的过程中,出现的最小值最大是多少
思路:其实仔细观察不难发现,这个题的本质就是序列从小到大排序后 的后一项与前一项元素的差,然后输出所有的差里最大的,因为你会发现这个操作只跟最小值和次小值有关。
Code:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2e5+10;
int a[N];
int n;
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int ans=a[0];
for(int i=1;i<n;i++)
ans=max(ans,a[i]-a[i-1]);
cout<<ans<<endl;
}
return 0;
}