/** * 两个任意值整数列 ,交换元素使两个数列的和相差最小 * @author tt * */ public class TwoArrayTotalLeast { static int[] first = {1,3,4,89,32,234,42,12,34,34,123,443,55,66}; static int[] second = {1,3,4,89,76,87,34,12,24,64,93,393,59,89}; static void sort(){ int[] max = null; int[] min = null; int sum1 =0; int sum2 = 0; for(int t : first){sum1 += t;} for(int t : second){sum2 += t;} if(sum1 < sum2){ min = first; max= second; }else{ max = first; min = second; } while(true){ boolean change = false; sum1=0;sum2=0; for(int t : max){sum1 += t;} for(int t : min){sum2 += t;} int sub = (sum1-sum2)/2; if(sub==0) break; int temp = -1; int tempi = -1; int tempj = -1; for(int i=0;i<max.length;i++){ for(int j=0;j<min.length ;j++){ if(max[i] > min[j] && (max[i] - min[j] <= sub) && (max[i] - min[j] > temp)){ temp = max[i] - min[j]; tempi = i; tempj = j; change = true; } } } if(change){ int t = max[tempi]; max[tempi] = min[tempj]; min[tempj] = t; }else break; } } public static void main(String[] args) { System.out.println(sum(first)); System.out.println(sum(second)); sort(); System.out.println(sum(first)); System.out.println(sum(second)); } public static int sum(int[] temp){ int result = 0; for(int i : temp){ result += i; } return result; } }