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

雙指針解法


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容