问题描述
小F手里有一个长度为nn的数组,他可以选择删除数组中的任意两个元素,并将它们的和作为一个新元素放回数组中。他最多可以进行一次这样的操作。小F的目标是使得数组的极值(即数组最大值减去最小值)尽可能小。现在你需要帮助小F计算出在最优操作下,数组能达到的最小极值。
测试样例
样例1:
输入:
n = 7 ,a = [1, 4, 3, 3, 2, 2, 3]
输出:2
样例2:
输入:
n = 5 ,a = [10, 5, 6, 7, 3]
输出:4
样例3:
输入:
n = 4 ,a = [1, 1, 1, 1]
输出:0
他的意思就是操作后让数组的最大值和最小值的差最小,对a数组排序后可以最大值和最小值可以在他们的位置体现出来,我们只要操作最前面两个元素就行了;只要进行两次排序就可以得到答案。
import java.util.Arrays;
public class Main {
public static int solution(int n, int[] a) {
int i;
for(i=1;i<n;i++){
if(a[i]!=a[i-1]){
break;
}
}
if(i==n){
return 0;
}
Arrays.sort(a);
int[] b=new int[n-1];
b[0]=a[0]+a[1];
for(i=2;i<n;i++){
b[i-1]=a[i];
}
Arrays.sort(b);
return b[n-2]-b[0];
}
public static void main(String[] args) {
System.out.println(solution(7, new int[]{1, 4, 3, 3, 2, 2, 3}) == 2);
System.out.println(solution(5, new int[]{10, 5, 6, 7, 3}) == 4);
System.out.println(solution(4, new int[]{1, 1, 1, 1}) == 0);
}
}