交换和

给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。
返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素。若有多个答案,返回任意一个均可。若无满足条件的数值,返回空数组。

  • 输入: array1 = [4, 1, 2, 1, 1, 2], array2 = [3, 6, 3, 3]

  • 输出: [1, 3]

  • 输入: array1 = [1, 2, 3], array2 = [4, 5, 6]

  • 输出: []

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var findSwapValues = function(array1, array2) {
// 计算当前的和
let sum1 = array1.reduce((sum, item) => sum + item);
let sum2 = array2.reduce((sum, item) => sum + item);
// 处理数组,去除相同的元素
array1 = [...new Set(array1)];
array2 = [...new Set(array2)];
// 循环比较
for (let i = 0; i < array1.length; i++) {
sum1 -= array1[i];
sum2 += array1[i];
for (let j = 0; j < array2.length; j++) {
if (sum1 + array2[j] === sum2 - array2[j]) {
return [array1[i], array2[j]];
}
}
sum1 += array1[i];
sum2 -= array1[i];
}
return [];
};