【精】LintCode领扣算法问题答案:1594. 公平的糖果交换

    科技2022-07-13  125

    1594. 公平的糖果交换

    描述

    爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。

    因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)

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

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

    1 <= A.length <= 100001 <= B.length <= 100001 <= A[i] <= 1000001 <= B[i] <= 100000保证爱丽丝与鲍勃的糖果总量不同。答案肯定存在。

    样例 1:

    输入: A = [1,1], B = [2,2] 输出: [1,2] 解释: A和B只有交换[1, 2]能达到相同的糖果总数

    样例 2:

    输入: A = [2], B = [1,3] 输出: [2,3] 解释: A和B只有交换[2, 3]能达到相同的糖果总数

    原题传送门


    文章目录

    1594. 公平的糖果交换描述样例 1:样例 2: 题解最后说两句声明


    题解

    public class Solution { /** * @param A: an array * @param B: an array * @return: an integer array */ public int[] fairCandySwap(int[] A, int[] B) { // Write your code here. int sumA = 0; int sumB = 0; for (int a : A) { sumA += a; } for (int b : B) { sumB += b; } Arrays.sort(A); Arrays.sort(B); if (sumA > sumB) { int diff = sumA - sumB; diff >>= 1; for (int a : A) { int needB = a - diff; if (Arrays.binarySearch(B, needB) >= 0) { int[] ret = new int[]{a, needB}; return ret; } } } else if (sumA < sumB) { int diff = sumB - sumA; diff >>= 1; for (int a : A) { int needB = a + diff; if (Arrays.binarySearch(B, needB) >= 0) { int[] ret = new int[]{a, needB}; return ret; } } } return new int[0]; } }

    最后说两句

    非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

    作者水平有限,如果文章内容有不准确的地方,请指正。

    希望小伙伴们都能每天进步一点点。

    声明

    本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

    Processed: 0.013, SQL: 8