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比较,如果一致即可;

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

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

  • 相关阅读:
    剑指offer 21:包含min函数的栈
    导航页的开发--手机web app开发笔记(四)
    manifest.json 解析--手机web app开发笔记(三-2)
    manifest.json 解析--手机web app开发笔记(三-1)
    默认文档解析--手机web app开发笔记(二)
    手机web app开发笔记
    JS开发备忘笔记-- Javascript中document.execCommand()的用法
    JS时间格式转换
    HBuilderx 模拟器调试设置
    截图小工具开发笔记
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14595723.html
Copyright © 2011-2022 走看看