牛老师挑选出n个小朋友参与跳舞节目,已知每个小朋友的身高(h_i)。为了让舞蹈看起来和谐,牛老师需要让跳舞的圆圈队形中相邻小朋友的身高差的最大值最小。
思路:对于 1 2 3 4 5 6,然后我们应该排成类似 6 4 2 1 3 5 这样可满足最大值最小,核心思想是田忌赛马,先放 6 5,然后 6 4 3 5...;
这种序列有一个特点:相邻两位的下标在原来序列中相差2
#include<bits/stdc++.h>
using namespace std;
int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n; cin>>n;
int a[n]; for (int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
int ans = max(a[1]-a[0], a[n-1]-a[n-2]);
for (int i=0; i<n-2; i++) {
ans = max(ans, a[i+2]-a[i]);
}
cout<<ans;
return 0;
}