zoukankan      html  css  js  c++  java
  • 力扣 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比较,如果一致即可;

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

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

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14595723.html
Copyright © 2011-2022 走看看