題目
難度:★☆☆☆☆
類型:數(shù)組,數(shù)學(xué)
愛(ài)麗絲和鮑勃有不同大小的糖果棒:A[i] 是愛(ài)麗絲擁有的第 i 塊糖的大小,B[j] 是鮑勃擁有的第 j 塊糖的大小。
因?yàn)樗麄兪桥笥?,所以他們想交換一個(gè)糖果棒,這樣交換后,他們都有相同的糖果總量。(一個(gè)人擁有的糖果總量是他們擁有的糖果棒大小的總和。)
返回一個(gè)整數(shù)數(shù)組 ans,其中 ans[0] 是愛(ài)麗絲必須交換的糖果棒的大小,ans[1] 是 Bob 必須交換的糖果棒的大小。
如果有多個(gè)答案,你可以返回其中任何一個(gè)。保證答案存在。
提示
1 <= A.length <= 10000
1 <= B.length <= 10000
1 <= A[i] <= 100000
1 <= B[i] <= 100000
保證愛(ài)麗絲與鮑勃的糖果總量不同。
答案肯定存在。
示例
示例 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]
解答
有這樣的規(guī)律:Alice和Bob的糖果總量之差等于他們交換的糖果大小之差的二倍:
證明:交換前后糖果總量不變,設(shè)交換前后Alice與Bob糖果總量是A_total和B_total,兩人拿出來(lái)的糖果大小是A_exchange和B_extrange,交換后兩人糖果總量都變成H_total,有:
A_total + B_exchange = B_total + A_exchange = H_total = (A_total + B_total) / 2
容易得到:(A_exchange - B_exchange) * 2 = A_total - B_total,即
B_exchange = A_exchange - (A_total - B_total) / 2
我們可以根據(jù)兩人糖果總量的差值,遍歷A中的糖果(A_exchange),查找對(duì)應(yīng)的B_exchange是否在B中即可。
class Solution:
def fairCandySwap(self, A, B):
"""
:param A: List[int]
:param B: List[int]
:return: List[int]
"""
diff = sum(A) - sum(B)
set_B = {}
for a in A:
need = a - diff // 2
if need in set_B:
return [a, need]
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~