力扣 888:公平的糖果棒交换(哈希表法)

题目描述:

    爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j]是鲍勃

    拥有的第 j 根糖果棒的大小。因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,

    他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)

    返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。

    如果有多个答案,你可以返回其中任何一个。保证答案存在。

示例:

  输入:A=[1 ,1] ,B=[2 ,2]

  输出:[1 ,2]

  输入:A=[2] ,B=[1 ,3]

  输出:[2 ,3]

  输入:A=[1 ,2 ,5] ,B=[2 ,4]

  输出:[5 ,4]

提示:

  1<= A.length<= 10000

  1<= B.length<= 10000

  1<= A[i]<=10000

  1<=B[i]<=10000

综合解法(哈希表):

  

var A=[1,2,5],B=[2,4];  //A,B拥有的糖果
var totalA=0,totalB=0;  //A,B各自拥有的糖果总量
totalA=A.reduce((acc,cur)=>{return acc+cur;});
totalB=B.reduce((acc,cur)=>{return acc+cur;});
var avaAB=Math.floor((totalA-totalB)/2);
var res; //最终得出的结果
var setA=new Set(A);
for(let y of B){
  let x= y+ava;
  if(setA.has(x)){
    res=[x,y];
    break;
  }
}
console.log('最终结果:',res);

 

总结:

  从A,B 关系可以得出如此关系:totalA-x+y=totalB-y+x,进一步化简可以得到 x=(totalA-totalB)/2+y;

  根据公式我们可以得到每一个x实例,继而将A从哈希表中取出和x比较,如果一致即可;

  一步一个脚印!!!继续加油

 

版权声明:本文为博主原创文章,如需转载,请标明出处。

posted @ 2021-03-30 11:53  gamecc666  阅读(65)  评论(0编辑  收藏  举报