开幕式排练
导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。
现在给出 n 个参演人员的身高,问在他们站成一圈时,相邻演员的身高差的最大值至少是多少? 请你帮忙计算。
输入描述
输入包括两行
第一行有 1 个正整数,代表人数 n。
第二行有 n 个空格隔开的正整数 h 表示第 i 个演员的身高。
数据保证2 <= n <= 1 0 5 10^5 105,1 <= h i h_i hi <= 1 0 9 10^9 109。
输出描述
输出包括一个正整数,表示答案。
样例输入
5
2 1 1 3 2
样例输出
1
题解
- 将数组从小到大排序
- 声明一个新数组,先加进最大元素(在中间),均匀的向两边插入元素(贪心:最小间隔就是这个数附近的数)
- 最后遍历一遍数组求出最大值
import java.util.*;
class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] h = new int[n];
for (int i = 0; i < n; i++) {
h[i] = in.nextInt();
}
Arrays.sort(h);
List<Integer> ans = new ArrayList<>();
//最后一个数肯定是最大的
ans.add(h[n - 1]);
int j = 0;
//均匀的向两边插入元素
for (int i = n - 2; i >= 0; i--) {
//System.out.println("j: "+j);
if (j % 2 == 0) {
ans.add(h[i]);
}
else {
ans.add(0, h[i]);
}
j ^= 1;
}
//遍历数组求相邻差的最大值
int maxx = 0;
for (int i = 0; i < n; i++) {
maxx = Math.max(maxx, Math.abs((ans.get(i) - ans.get((i + 1) % n))));
}
System.out.println(maxx);
}
}