題目描述:
愛麗絲和鮑勃有不同大小的糖果棒: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
雙指針解法