微软100题-天天做-第32题

来源:互联网 发布:js访问者模式 编辑:程序博客网 时间:2024/06/05 16:23
32.(数组、规划)
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:  
var a=[100,99,98,1,2, 3];

var b=[1, 2, 3, 4,5,40];


package com.microsoft;import java.util.ArrayList;import java.util.List;public class MiniSub {private List<Integer> a=new ArrayList<Integer>();private List<Integer> b=new ArrayList<Integer>();private List<Integer>data=new ArrayList<Integer>();private List<Integer>resultA=new ArrayList<Integer>();private List<Integer> resultB=new ArrayList<Integer>();private int miniSum=Integer.MIN_VALUE;private int sizeA;private int sizeB;public MiniSub(int []a,int[]b){int i=0;for(;i<a.length;i++){data.add(a[i]);}for(int j=0;j<b.length;j++){data.add(b[j]);}sizeA=a.length;sizeB=b.length;}public void choose(){int i=0;for( i=0;i<sizeA;i++){a.add(data.get(i));}for(int j=0;j<sizeB;j++){b.add(data.get(i+j));}exchange(1);}public void exchange(int num){sub();Math.min(a.size(), b.size());for(int l=0;l<a.size();l++){for(int m=0;m<b.size();m++){int tmpA=a.remove(l);a.add(l,b.remove(m));b.add(m, tmpA);sub();}}for(int l=0;l<b.size();l++){for(int m=0;m<a.size();m++){int tmpB=b.remove(l);b.add(l,a.remove(m));a.add(m, tmpB);sub();}}}public void sub(){int sum=0;for(int k=0;k<a.size();k++){sum+=a.get(k);}for(int k=0;k<b.size();k++){sum-=b.get(k);}sum=Math.abs(sum);if(miniSum==Integer.MIN_VALUE){while(!resultA.isEmpty()){resultA.remove(resultA.size()-1);}for(int i=0;i<a.size();i++){resultA.add(a.get(i));}while(!resultB.isEmpty()){resultB.remove(resultB.size()-1);}for(int i=0;i<b.size();i++){resultB.add(b.get(i));}miniSum=sum;print();}else{if(miniSum>sum){miniSum=sum;while(!resultA.isEmpty()){resultA.remove(resultA.size()-1);}for(int i=0;i<a.size();i++){resultA.add(a.get(i));}while(!resultB.isEmpty()){resultB.remove(resultB.size()-1);}for(int i=0;i<b.size();i++){resultB.add(b.get(i));}print();}}}public void print(){for(int i=0;i<resultA.size();i++){System.out.print(resultA.get(i)+" ");}System.out.println();for(int i=0;i<resultB.size();i++){System.out.print(resultB.get(i)+ " ");}System.out.println();}public static void main(String[] args) {int []a=new int[]{1,2,98,1,2,3};int []b=new int[]{100,40,3,4,5,99};MiniSub mini=new MiniSub(a,b);mini.choose();mini.print();}}


0 0
原创粉丝点击