888.公平的糖果棒交换

题目描述:

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

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

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

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

示例 1:

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

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

Python 解决办法(一) 暴力破解法

class Solution:
    def fairCandySwap(self, A: List[int], B: List[int]) -> List[int]:
        for i in range(0,len(A)):
            for j in range(0,len(B)):
                sum_A = sum(A) - A[i] + B[j]
                sum_B = sum(B) - B[j] + A[i]
                if sum_A == sum_B:
                    return [A[i],B[j]]

性能 :超出时间限制

Python 解决办法(二)

这道题其实就是给你两个数组,让你从两个数组中分别选取一个进行交换,使得交换后的数组和相等。

因此我们可以提前计算出两个数组的差,并将其中一个数组放到哈希表中。这样问题就转换为遍历另外一个数组,并在哈希表中查找 x - diff / 2 是否在哈希表中存在即可,其中 x 为当前遍历到的数,diff 为两个数组的差。 这就是经典的两数和问题了。

作者:fe-lucifer
链接:https://leetcode-cn.com/problems/fair-candy-swap/solution/liang-shu-he-huan-pi-python3888-gong-pin-dpp7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


性能: 52 ms 14.9 MB Python3

Python 解决办法(三)


性能 32 ms 14.9 MB Python3

双指针解法


你可能感兴趣的:(888.公平的糖果棒交换)