题目:
通过交换a,b中的元素,使数组a和数组b的和差最小(数组大小不能变,不能同列直接交换)
//两数组进行元素交换实现最小差值
public static void getMinusArray(int[] a, int[] b) {
// 数组a和b的和
int suma = getSum(a);
int sumb = getSum(b);
int startMinus = Math.abs(suma - sumb);
int minus = 0;
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a.length; j++) {
//先交换
int temp=a[i];
a[i]=b[j];
b[j]=temp;
//交换后的差值
minus = Math.abs(getSum(a) - getSum(b));
if(minus<startMinus){
startMinus = minus;
}else{
//若交换后,差值比原来大或相等,则不交换--即重新换回来
int temp2=a[i];
a[i]=b[j];
b[j]=temp2;
}
}
}
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
// 求数组和
public static int getSum(int[] arr) {
int sum = 0;
for (int i : arr) {
sum += i;
}
return sum;
}
public static void main(String[] args){
int[] a= {1,9,11,0,12,8,9,5};
int[] b= {1,9,11,9,12,8,9,5,12,14,19,20};
getMinusArray(a,b);
}