題目描述:
愛麗絲和鮑勃有不同大小的糖果棒:A[i] 是愛麗絲擁有的第 i 根糖果棒的大小,B[j] 是鮑勃擁有的第 j 根糖果棒的大小粉私。
因?yàn)樗麄兪桥笥烟兀运麄兿虢粨Q一根糖果棒康铭,這樣交換后蹋宦,他們都有相同的糖果總量披粟。(一個(gè)人擁有的糖果總量是他們擁有的糖果棒大小的總和。)
返回一個(gè)整數(shù)數(shù)組 ans冷冗,其中 ans[0] 是愛麗絲必須交換的糖果棒的大小守屉,ans[1] 是 Bob 必須交換的糖果棒的大小。
如果有多個(gè)答案蒿辙,你可以返回其中任何一個(gè)拇泛。保證答案存在。
示例 1:
輸入:A = [1,1], B = [2,2]
輸出:[1,2]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/fair-candy-swap
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有思灌。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)俺叭,非商業(yè)轉(zhuǎn)載請注明出處。
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]]
性能 :超出時(shí)間限制
Python 解決辦法(二)
這道題其實(shí)就是給你兩個(gè)數(shù)組习瑰,讓你從兩個(gè)數(shù)組中分別選取一個(gè)進(jìn)行交換绪颖,使得交換后的數(shù)組和相等。
因此我們可以提前計(jì)算出兩個(gè)數(shù)組的差甜奄,并將其中一個(gè)數(shù)組放到哈希表中柠横。這樣問題就轉(zhuǎn)換為遍歷另外一個(gè)數(shù)組,并在哈希表中查找 x - diff / 2 是否在哈希表中存在即可课兄,其中 x 為當(dāng)前遍歷到的數(shù)牍氛,diff 為兩個(gè)數(shù)組的差。 這就是經(jīng)典的兩數(shù)和問題了烟阐。
作者:fe-lucifer
鏈接:https://leetcode-cn.com/problems/fair-candy-swap/solution/liang-shu-he-huan-pi-python3888-gong-pin-dpp7/
來源:力扣(LeetCode)
著作權(quán)歸作者所有搬俊。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處蜒茄。
性能: 52 ms 14.9 MB Python3
Python 解決辦法(三)
性能 32 ms 14.9 MB Python3
雙指針解法