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

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

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

  • 相关阅读:
    Vue.js的组件化思想--下
    Vue.js的组件化思想--上
    Git常用命令总结
    vue基础语法
    ES6基础语法
    Vue笔记
    Vue的基本使用(一)
    es6的基本用法
    Django-admin管理工具
    Django组件-中间件
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14595723.html
Copyright © 2011-2022 走看看