给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。
返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素。若有多个答案,返回任意一个均可。若无满足条件的数值,返回空数组。
示例:
输入: array1 = [4, 1, 2, 1, 1, 2], array2 = [3, 6, 3, 3]
输出: [1, 3]
示例:
输入: array1 = [1, 2, 3], array2 = [4, 5, 6]
输出: []
提示:
1 <= array1.length, array2.length <= 100000
/**
* @param {number[]} array1
* @param {number[]} array2
* @return {number[]}
*/
var findSwapValues = function (array1, array2) {
array1.sort();
array2.sort();
const sum1 = array1.reduce((pre, cur) => pre += cur, 0);
const sum2 = array2.reduce((pre, cur) => pre += cur, 0);
const d = Math.max(sum1, sum2) - Math.min(sum1, sum2);
array1 = Array.from(new Set(array1));
array2 = Array.from(new Set(array2));
if (d % 2 === 1) {
return [];
}
else {
if (sum1 < sum2) {
for (let i = 0; i < array2.length; i++) {
for (let j = 0; j < array1.length; j++) {
if (array2[i] < array1[j]) {
break;
}
if (array2[i] - array1[j] === d / 2) {
return [array1[j], array2[i]];
}
}
}
}
else {
for (let i = 0; i < array1.length; i++) {
for (let j = 0; j < array2.length; j++) {
if (array1[i] < array2[j]) {
break;
}
if (array1[i] - array2[j] === d / 2) {
return [array1[i], array2[j]];
}
}
}
}
}
return [];
};