Alice and Bob have candy bars of different sizes: `A[i]` is the size of the `i`-th bar of candy that Alice has, and `B[j]` is the size of the `j`-th bar of candy that Bob has.

Since they are friends, they would like to exchange one candy bar each so that after the exchange, they both have the same total amount of candy.  (The total amount of candy a person has is the sum of the sizes of candy bars they have.)

Return an integer array ans where ans[0] is the size of the candy bar that Alice must exchange, and ans[1] is the size of the candy bar that Bob must exchange.

If there are multiple answers, you may return any one of them.  It is guaranteed an answer exists.

Example 1:

Input: A = [1,1], B = [2,2]
Output: [1,2]

Example 2:

Input: A = [1,2], B = [2,3]
Output: [1,2]

Example 3:

Input: A = [2], B = [1,3]
Output: [2,3]

Example 4:

Input: A = [1,2,5], B = [2,4]
Output: [5,4]

Note:

  • 1 <= A.length <= 10000
  • 1 <= B.length <= 10000
  • 1 <= A[i] <= 100000
  • 1 <= B[i] <= 100000
  • It is guaranteed that Alice and Bob have different total amounts of candy.
  • It is guaranteed there exists an answer.

这道题说爱丽丝和鲍勃两人有不同大小的糖果,现在要让两人交换一个糖果,使得交换后两人的糖果总重量相同,而且限定了两人初始时的糖果总量不相同,并且一定会有解。若我们仔细观察题目中给的例子,可以发现所有例子中起始时 Alice 和 Bob 两人的糖果总重量的差值一定时偶数,这是 make sense 的,因为最终两人的糖果总量时要相同的,那么起始时的重量差就应该能平均分为两部分,一部分来弥补轻的一方,一部分来抵消重的一方。那么有了这个 diff,我们只需要在两个数组中查找差值为 diff 的两个数字了,其实就是 [Two Sum](http://www.cnblogs.com/grandyang/p/4130379.html) 的变种,使用一个 HashSet 先来保存数组 A 中所有的数字,然后遍历数组B中的每个数字 num,查找 HashSet 中否存在 num+diff 即可,参见代码如下:

class Solution {
public:
vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
int diff = (accumulate(A.begin(), A.end(), 0) - accumulate(B.begin(), B.end(), 0)) / 2;
unordered_set<int> st(A.begin(), A.end());
for (int num : B) {
if (st.count(num + diff)) return {num + diff, num};
}
return {};
}
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/888

类似题目:

Two Sum

参考资料:

https://leetcode.com/problems/fair-candy-swap/

https://leetcode.com/problems/fair-candy-swap/discuss/161269/C%2B%2BJavaPython-Straight-Forward

[LeetCode All in One 题目讲解汇总(持续更新中...)](https://www.cnblogs.com/grandyang/p/4606334.html)

最新文章

  1. 篇三:访问JSON静态文件
  2. Linux学习心得之 Linux下ant安装与使用
  3. flex(兼容写法)
  4. 关于input内容监听(change)
  5. How to apply Local Group Policy settings silently using the ImportRegPol.exe and Apply_LGPO_Delta.exe utilities.
  6. C语言-03-流程控制
  7. 每天进步一点点--JS中的getYear()
  8. Exchange Cards(dfs)
  9. Java中使用LocalDate根据日期来计算年龄
  10. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录
  11. 【Mock】mock基础、简单的单元测试代码练习。
  12. C#操作字符串方法总结
  13. 转:iOS-生成Bundle包-引入bundle-使用bundle
  14. [JSOI2009] 球队收益 (费用流)
  15. Codeforces Round #356 (Div. 1) D. Bear and Chase 暴力
  16. 查看APK包签名的方法。
  17. PHP中的构造方法和析构方法
  18. CentOS 报错cannot execute binary file
  19. Reading——简约至上
  20. JSP学习(JavaBean)

热门文章

  1. CSS3倒影效果
  2. 八、Spring之深入理解声明式事务
  3. RStudio 不中断下载依赖包
  4. sql语句规范参考
  5. git 创建标签 tag
  6. 【洛谷5439】【XR-2】永恒(树链剖分,线段树)
  7. CentOS 8 换源,设置dnf / yum镜像
  8. .net webapi跨域问题
  9. C# winform 获取鼠标点击位置
  10. [基础] - 从xx语言是跨平台的说起