这是悦乐书的第339次更新,第363篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第208题(顺位题号是888)。Alice和Bob有不同大小的糖果棒:A[i]是Alice拥有的第i个糖果棒的大小,B[j]是Bob拥有的第j个糖果棒的大小。

由于他们是朋友,他们想交换一个糖果,以便交换后,他们都有相同的糖果总量。 (一个人拥有的糖果总量是他们拥有的糖果大小的总和。)

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

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

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

输出:[1,2]

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

输出:[1,2] [2,3]

输入: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] <= 100000

  • 1 <= B [i] <= 100000

  • 保证Alice和Bob的糖果总量不同。

  • 保证有答案。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

Alice和Bob的糖果总量不一样,要想答案肯定存在,他们两人的糖果总量差值肯定为偶数,只有差值为偶数时,对差值进行平分得到一个平均值,糖果总量多的一方减去平均值,少的一方加上平均值,此时两人的糖果总量是相等的。

因此,我们只需要求出两人的糖果总量差值的平均数,拿此平均数加上一方中的任意一个糖果的大小,去匹配另外一方中的糖果大小,能够匹配上,说明这两个糖果是需要双方交换的,在此情景下,此题有点类似于Two Sum。

public int[] fairCandySwap(int[] A, int[] B) {
int[] result = new int[2];
// 存储A中的元素(换成B也行)
Set<Integer> set = new HashSet<Integer>();
int sumA = 0;
for (int a : A) {
sumA += a;
set.add(a);
}
int sumB = 0;
for (int b : B) {
sumB += b;
}
// 两人糖果总量之差的平均数
int num = (sumA-sumB)/2;
// 遍历B中元素,加上差值平均数去另外一个数组里匹配,
// 能匹配上,表明遇到了需要交换的元素。
for (int b : B) {
if (set.contains(b+num)) {
return new int[]{b+num, b};
}
}
return result;
}

03 第二种解法

针对第一种解法使用的HashSet,我们还可以换成另外的数据结构来代替,使用一个boolean类型的数组来存储A中的值,其他思路不变。

public int[] fairCandySwap2(int[] A, int[] B) {
int[] result = new int[2];
boolean[] set = new boolean[100001];
int sumA = 0;
for (int a : A) {
sumA += a;
set[a] = true;
}
int sumB = 0;
for (int b : B) {
sumB += b;
}
int num = (sumA-sumB)/2;
for (int b : B) {
if (b+num > 0 && b+num < 100001 && set[b+num]) {
return new int[]{b+num, b};
}
}
return result;
}

04 小结

算法专题目前已连续日更超过六个月,算法题文章208+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.888-公平的糖果交换(Fair Candy Swap)的更多相关文章

  1. [Swift]LeetCode888. 公平的糖果交换 | Fair Candy Swap

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  2. 888. 公平的糖果交换--LeetCode

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/fair-candy-swap 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 假 ...

  3. 888. Fair Candy Swap@python

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  4. 【Leetcode_easy】888. Fair Candy Swap

    problem 888. Fair Candy Swap solution: class Solution { public: vector<int> fairCandySwap(vect ...

  5. 【LeetCode】888. Fair Candy Swap 公平的糖果棒交换(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人公众号: 每日算法题 本文关键词:力扣,LeetCode,算法题,算法,Python 目录 题目描述 题目大意 解题方法 代码 刷题心得 关于作 ...

  6. [LeetCode] 888. Fair Candy Swap 公平糖果交换

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  7. C#LeetCode刷题之#888-公平的糖果交换(Fair Candy Swap)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3758 访问. 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝 ...

  8. Leetcode888.Fair Candy Swap公平的糖果交换

    爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小. 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量.( ...

  9. LeetCode 888 Fair Candy Swap 解题报告

    题目要求 Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy tha ...

随机推荐

  1. three.js 流程图

    用Axure做了个模型图:          第一步: Scene --模型.灯光.特效 第二步: Camera --视角 第三步: Renderer -- 渲染输出 第四步: render --渲染 ...

  2. AO如何获取SDE数据库中的数据

    /// <summary> /// 获取Table类型表的记录 /// </summary> /// <param name="relationCheckCla ...

  3. VHDL之concurrent之when

    WHEN (simple and selected) It is one of the fundamental concurrent statements (along with operators ...

  4. css基础四

    过渡属性 下面的表格列出了所有的转换属性: 属性 描述 CSS transition 简写属性,用于在一个属性中设置四个过渡属性. 3 transition-property 规定应用过渡的 CSS ...

  5. Tomcat jsp页面显示有问题

    1.干掉tomcat下的work文件夹里面的东西,让jsp文件重新编译,相当于清楚缓存 2.work 里面是 jsp 编译的类 ,只要jsp 被访问了,就会被编译,就会生成相应的类 3.tomcat下 ...

  6. java中反射讲解及实例

    Java反射机制详解 java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实 ...

  7. [adb]查看 App的appPackage和appActivity

    最近在写app的UI框架,写脚本之前需要知道app的包名和activity,如果获取呢: 需求配置abdrioid sdk环境 方法1:abd log 1. 打开cmd命令窗口2.在命令窗口中输入,a ...

  8. linux基础随记

    1.cd 切换路径 cd ~vbird 进入这个用户的主目录cd ~ 进入root这个目录下cd .. 进入root上层目录cd - 进入root这个目录下cd /var/spool/mail 直接访 ...

  9. AtCoder ABC 070D - Transit Tree Path

    传送门:http://abc070.contest.atcoder.jp/tasks/abc070_d 本题是一个图论问题——树(Tree). 有一棵结点数目为n的无向树.第i条边连接结点ai与bi, ...

  10. 2.SpringBoot的properties的属性配置详解

    SpringBoot是为了简化Spring应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以 ...