有两个序列a,b,大小都有n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小。
例如:
var a = [100, 99, 98, 1, 2, 3];
import java.util.Collections;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
public class Test {
protected static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
List<Integer> a = Lists.newArrayList(100, 99, 98, 1, 2, 3);
List<Integer> b = Lists.newArrayList(1, 2, 3, 4, 5, 40);
Collections.sort(a);
Collections.sort(b);
int totalA = 0, totalB = 0;
for (int i : a) {
totalA += i;
}
for (int i : b) {
totalB += i;
}
int curDiff = Math.abs(totalA - totalB);
for (int i = a.size() - 1; i >= 0; i--) {
for (int j = b.size() - 1; j >= 0; j--) {
int chgTotalA = totalA - a.get(i) + b.get(j);
int chgTotalB = totalB - b.get(j) + a.get(i);
int chgDiff = Math.abs(chgTotalA - chgTotalB);
if (chgDiff < curDiff) {
curDiff = chgDiff;
totalA = chgTotalA;
totalB = chgTotalB;
int temp = a.get(i);
a.set(i, b.get(j));
b.set(j, temp);
}
}
}
logger.info("a:{}", a);
logger.info("b:{}", b);
}
}
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b无素的和]之间的差最小。
例如:
var a = [100, 99, 98, 1, 2, 3];
var b = [1, 2, 3, 4, 5, 40];
package com.tourism;
import java.util.Collections;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
public class Test {
protected static Logger logger = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
List<Integer> a = Lists.newArrayList(100, 99, 98, 1, 2, 3);
List<Integer> b = Lists.newArrayList(1, 2, 3, 4, 5, 40);
Collections.sort(a);
Collections.sort(b);
int totalA = 0, totalB = 0;
for (int i : a) {
totalA += i;
}
for (int i : b) {
totalB += i;
}
int curDiff = Math.abs(totalA - totalB);
for (int i = a.size() - 1; i >= 0; i--) {
for (int j = b.size() - 1; j >= 0; j--) {
int chgTotalA = totalA - a.get(i) + b.get(j);
int chgTotalB = totalB - b.get(j) + a.get(i);
int chgDiff = Math.abs(chgTotalA - chgTotalB);
if (chgDiff < curDiff) {
curDiff = chgDiff;
totalA = chgTotalA;
totalB = chgTotalB;
int temp = a.get(i);
a.set(i, b.get(j));
b.set(j, temp);
}
}
}
logger.info("a:{}", a);
logger.info("b:{}", b);
}
}