交换和

描述:

    给定两个数组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

};


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。