示例 1:
输入:costs = [[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 a 市,费用为 10。
第二个人去 a 市,费用为 30。
第三个人去 b 市,费用为 50。
第四个人去 b 市,费用为 20。
最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。
示例 2:
输入:costs = [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]]
输出:1859
示例 3:
输入:costs = [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]]
输出:3086
public class test3 {
public static void main(String[] args) {
List<Integer> add = List.of(515,563);//A
List<Integer> add1 = List.of(451,713);//B
List<Integer> add2 = List.of(537,709);//B
List<Integer> add3 = List.of(343,819);//B
List<Integer> add4 = List.of(457,60);//B
List<Integer> add5 = List.of(650,359);//B
List<Integer> add6 = List.of(631,42);//B
List<Integer> add7 = List.of(855, 779);
List<List<Integer>> list4 = List.of(add, add1, add2, add3, add4, add5 , add6 ,add7);
//costs = [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]]
System.out.println(list4);
//遍历得到所有数组中的差值
Map<Integer, Integer> map1 = new HashMap<>();
for (int i = 0; i < list4.size(); i++) {
List<Integer> list = list4.get(i);
int i1 = (list.get(1)) - (list.get(0));
if (i1 > 0) {
map1.put(i, i1);
} else {
map1.put(i, i1);
}
}
System.out.println(map1);//{0=48, 1=262, 2=172, 3=476, 4=-397, 5=-291, 6=-589, 7=-76}
//汇总集合的长度
int size = list4.size();
//最后得到的总和计数
int result = 0;
//初始化一个分配系数
int a = 0;
int b = 0;
while (map1.size()>0) {
//初始化最大差值key
int key = 0;
int value = 0;
int i = 0;
for (Integer integer : map1.keySet()) {
//初始化最大差值为起始点
if (i == 0) {
//转正数
value = Math.abs(map1.get(integer));
key = integer;
} else {
//转正数
if (Math.abs(map1.get(integer)) > value) {
//替换最大差值
key = integer;
}
}
i++;
}
//根据差值正负,算 分配 到哪边
Integer integer = map1.get(key);
if (integer > 0 ) {
if (a < (size/2) ) {
result = result + list4.get(key).get(0);
a++;
}else {
result = result + list4.get(key).get(1);
b++;
}
} else {
if ( b <(size/2) ){
result = result + list4.get(key).get(1);
b++;
}else {
result = result + list4.get(key).get(0);
a++;
}
}
//移除算过的key值
map1.remove(key);
System.out.println("此时map1的值为: " + map1);
}
System.out.println(a+" "+b);
System.out.println("结果是:" + result);
}
}