LeetCode 888. Fair Candy Swap

Alice and Bob have a different total number of candies. You are given two integer arrays aliceSizes and bobSizes where aliceSizes[i] is the number of candies of the ith box of candy that Alice has and bobSizes[j] is the number of candies of the jth box of candy that Bob has.

Since they are friends, they would like to exchange one candy box 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 number of candies in each box they have.

Return an integer array answer where answer[0] is the number of candies in the box that Alice must exchange, and answer[1] is the number of candies in the box that Bob must exchange. If there are multiple answers, you may return any one of them. It is guaranteed that at least one answer exists.

Example 1:

Input: aliceSizes = [1,1], bobSizes = [2,2]
Output: [1,2]

Example 2:

Input: aliceSizes = [1,2], bobSizes = [2,3]
Output: [1,2]

Example 3:

Input: aliceSizes = [2], bobSizes = [1,3]
Output: [2,3]

Constraints:

  • 1 <= aliceSizes.length, bobSizes.length <= 104
  • 1 <= aliceSizes[i], bobSizes[j] <= 105
  • Alice and Bob have a different total number of candies.
  • There will be at least one valid answer for the given input.

给了俩数组,要求换这俩数组中的两个数字,交换以后两个数组之和相等。

其实就是个简单的数学问题,计算数组a和数组b的总和之差是多少,然后看看b里面是否有a - diff的数字(用set记录b里的数字),最后return就行了。最开始想多了还在求diff的时候用了math.abs,这样会导致分配的不够。

class Solution {
    public int[] fairCandySwap(int[] aliceSizes, int[] bobSizes) {
        int aCount = 0;
        int bCount = 0;
        Set bSet = new HashSet<>();
        for (int i : aliceSizes) {
            aCount += i;
        }
        for (int i : bobSizes) {
            bCount += i;
            bSet.add(i);
        }
        int diff = (aCount - bCount) / 2;
        for (int i : aliceSizes) {
            int match = i - diff;
            if (bSet.contains(match)) {
                return new int[]{i, match};
            }
        }
        return new int[2];
    }
}

你可能感兴趣的:(LeetCode,leetcode)