LeetCode888. 公平なキャンディ交換


アリスとボブは異なる大きさのキャンディバーを持っています.A[i]はアリスが持っているi枚目の砂糖の大きさで、B[j]はボブが持っているj枚目の砂糖の大きさです.
彼らは友达なので、キャンディの棒を交換したいと思っています.このように交換した後、彼らは同じキャンディの総量を持っています.△一人が持っているキャンディの総量は、彼らが持っているキャンディの棒の大きさの合計です.
整数配列ansを返します.ans[0]はアリスが交換しなければならないキャンディ棒の大きさで、ans[1]はBobが交換しなければならないキャンディ棒の大きさです.
複数の答えがある場合は、いずれかを返すことができます.答えが存在することを保証します.
例1:
A = [1,1], B = [2,2]
[1,2]

例2:
A = [1,2], B = [2,3]
[1,2]

例3:
A = [2], B = [1,3]
[2,3]

例4:
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
  • アリスとボブのキャンディの総量が異なることを保証します.
  • 答えは必ず存在します.

  • 問題を手に入れて、第一反応、愚かです.ああ、久しぶりに書くのが鈍くて、方法を考えてみました.
    まず2人がそれぞれどれだけの砂糖を持っているかを求めて、それから平均して2人がどれだけの砂糖を持っているべきかを求めて、アリスの砂糖と平均すべき結果の差を計算します.
    ボブの砂糖の山の中でこのような砂糖がちょうどアリスのある砂糖にさっき計算した差があるかどうかを探しています.
    探して、見つけてくれればいいのに.
    flagはマークをしていますが、結果のセットだけでいいので、1つ見つければタスクを終了できます.
    うん、いい加減に.
    class Solution {
    public:
        vector fairCandySwap(vector& A, vector& B) 
        {
            int sumA=0,sumB=0;
            vector swap;
            for(int i=0;i!=A.size();i++)
                sumA+=A[i];
            for(int i=0;i!=B.size();i++)
                sumB+=B[i];
    
            int aver=(sumA+sumB)/2;
            int deta=aver-sumA;
            int flag=0;
            
            for(int i=0;i!=A.size();i++)
            {
                for(int j=0;j!=B.size();j++)
                {
                    if((A[i]+deta)==B[j])
                    {
                        swap.push_back(A[i]);
                        swap.push_back(B[j]);
                        flag=1;
                    }
                    if(flag>0)
                        break;
                }
                if(flag>0)
                    break;
            }
            return swap;
        }
    };