题目描述
输入
5
6
1 3 9 11 5 7
1
20
3
9 99 999
4
2 1 8 1
3
2 1 5
输出
10
0
990
7
4
题意
给我们一段长度为n的数组,我们可以进行一次下面的操作,选择一段区间[l,r],让这个区间内的元素在该区间内循环右移任意次,问在经过这次操作后,我们能得到的a[n]-a[1]的最大值是多少。
思路
1.把最小的放第一位
2.把最大的放最后
3.找出a[ i ] - a[ i + 1 ] 的最大值
代码
#include<iostream>
#include<cstring>
using namespace std;
int a[121221];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int maxx=-99999999;
int minx=99999999;
for(int i=0;i<n;i++)
{
cin>>a[i];
maxx=max(maxx,a[i]);
minx=min(minx,a[i]);
}
int ans=a[n-1]-a[0];
ans=max(ans,maxx-a[0]);
ans=max(a[n-1]-minx,ans);
for(int i=0;i<n-1;i++)
{
ans=max(a[i]-a[i+1],ans);
}
cout<<ans<<endl;
memset(a,0,sizeof a);
}
return 0;
}