描述:
给定两个数组array1、array2,交换一对数值,是的两个数组的和相等,(即从array1中取出一个数a,放入到array2中,同时在array1中删除a,给array2相同的操作。)
如果满足条件返回交换的数字a和b,以数组的形式返回[ a, b ]
如果无法满足,返回 [ ]
如果有多个满足条件的结果,人已返回一个即可
示例
输入: [ 1,2 ] [ 2 , 3 ]
输出: [ 1 , 2 ]
分析:
规定第一个数组array1的和为 num1 , array2的和为 num2,他们的差值有两种情况,要么是奇数,要么是偶数
1、奇数
如果num1 - num2 =奇数,那么 num1 和 num2 肯定是一个奇数,一个偶数,
再根据题目描述,假设从array1中取出a放入array2中,从array2中 取出b放入array1中,那么两个数组的和变为:
num1 = num1 - a + b = num1 + ( b - a)
num2 = num2 - b + a = num2 + ( a - b)
假设 a - b = c
那么上面的公式变为:
num1 = num1 +(-c)
num2 = num2 + c
因为num1和num2两个数一个是奇数,一个是偶数,对同一个数进行加减之后它们还是一奇一偶,所以不可能相同
如果两个数组的和的差m是奇数,则无法满足同条件,如果是偶数,找出两个数组中差值等于m/2的两个数即可
2、偶数
var findSwapValues = function(array1, array2) {
let num1 = 0,
num2=0;
var res = []
array1.forEach((item,index) => {
num1 += item
})
array2.forEach((item,index) => {
num2 += item
})
m = num1 - num2
if( m % 2 != 0){
return res
}
for(let i = 0; i < array1.length; i ++) {
for(let j = 0; j < array2.length; j ++) {
if(array1[i]-array2[j] == m/2) {
res.push(array1[i],array2[j])
return res
}
}
}
return res
};