一:思路来源
~那一份坚持
//这个很简单啊!怎么样身高差最小呢?就是两身高差不多的人站一起咯,小时候站队 老师总让
//矮的站中间高的站两边,就是这个道理,如 9 8 7 6 6 7 8 9然后9和9再拉手不就可以了吗 !所以
//将数据输入一个数组如【8 9 7 6 5 4 3 2】然后排序【2 3 4 5 6 7 8 9】然后遍历数组进入
//一个队列一个栈 现规定,索引为0,2,4,,,的依次进入队列Q1,索引为1,3,5,,,,的依次进入//栈S1,就形成一个队列2 4 6 8 (队列尾为8)和一个栈3 5 7 9(栈顶为9) 。然后出栈9 7 5 3
//依次进入队列尾 形成 2 4 6 8 9 7 5 3 就排队成功,2和3拉手就成圈,求每个元素与挨着的
//距离就可以了
二:代码实现
#include<iostream>
#include<algorithm>
#include <cstring>
using namespace std;
int main(){
int n=0,max=-1;
cin>>n;
int a[n];
int b[n];
int c[n];
memset(a, 0,sizeof(a));
memset(b, 0,sizeof(b));
memset(c, 0,sizeof(c));
int x=0,y=0;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(i%2==0)
{
b[x]=a[i];
x++;
}else{
c[y]=a[i];
y++;
}
//cout<<c[0]<<" 1"<<c[1]<<endl;
}
int k=0;
for(int i=y-1;i>=0;i--)
{
// cout<<c[i]<<" c"<<endl;
b[x+k]=c[i];
k++;
}
// for(int i=0;i<n;i++)
// cout<<b[i]<<endl;
for(int i=0;i<n-1;i++)
{
// cout<<a[i]<<" "<<a[i+1]<<endl;
int temp=abs(b[i+1]-b[i]);
if(temp>max)
max=temp;
//cout<<max<<endl;
}
int tempend=abs(b[0]-b[n-1]);
if(tempend>max)
max=tempend;
cout<<max<<endl;
return 0;
}