美文网首页
888.公平的糖果棒交换

888.公平的糖果棒交换

作者: xacker | 来源:发表于2021-02-01 23:38 被阅读0次

    题目描述:

    爱丽丝和鲍勃有不同大小的糖果棒: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

    双指针解法

    
    

    相关文章

      网友评论

          本文标题:888.公平的糖果棒交换

          本文链接:https://www.haomeiwen.com/subject/jhketltx.html