题目描述:
爱丽丝和鲍勃有不同大小的糖果棒: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
双指针解法