zoukankan      html  css  js  c++  java
  • LeetCode 888. Fair Candy Swap(C++)

    题目:

    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]

    分析:

    两个人拥有一些糖果,交换一个后,两人糖果总和相等。

    我们计sumA为A拥有的和,sumB为B拥有的和,a是A交出去的糖果,b是B交换出去的糖果,根据题意有如下等式。

    sumA-a+b=sumB-b+a  =>  sumB-sumA=2b-2a  =>  b-a=(sumB-sumA)/2

    我们只需要找到一组满足b-a=(sumB-sumA)/2的b和a,交换后两人的糖果总和便相等了。

    可以使用map存储A糖果的个数,然后遍历B的时候,查找map[(sumB-sumA)/2-b]是否等于1就可以了,实现方法有很多,这里就不一一赘述了。

    程序:

    class Solution {
    public:
        vector<int> fairCandySwap(vector<int>& A, vector<int>& B) {
            vector<int> res;
            int sumA = 0;
            int sumB = 0;
            for(auto a:A){
                sumA += a;
            }
            for(auto b:B){
                sumB += b;
            }
            int cha = (sumB - sumA)/2;
            unordered_map<int, int> m;
            for(auto a:A){
                m[a] = 1;
            }
            for(auto b:B){
                if(m[b-cha] == 1){
                    res.push_back(b-cha);
                    res.push_back(b);
                    return res;
                }
            }
            return res;
        }
    };
  • 相关阅读:
    诺基亚为 Qt 增添 LGPL 授权选择
    Web Beans (JSR299): Q&amp;A with Specification Lead Gavin King
    Web Beans (JSR299): Q&amp;A with Specification Lead Gavin King
    诺基亚为 Qt 增添 LGPL 授权选择
    使用 Hibernate 进行大数据量的性能测试
    略谈如何在对话框创建视图类画图
    JBoss Seam 框架下的单元测试
    领域模型设计讨论与研究
    JBoss Seam 框架下的单元测试
    The use of FS/GS registers
  • 原文地址:https://www.cnblogs.com/silentteller/p/10538867.html
Copyright © 2011-2022 走看看