0
点赞
收藏
分享

微信扫一扫

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

whiteMu 2022-07-28 阅读 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 条评论