1594. 公平的糖果交换

1594. 公平的糖果交换

中文English

爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小。

因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)

返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1] 是 Bob 必须交换的糖果棒的大小。

如果有多个答案,你可以返回其中任何一个。保证答案存在。

样例

样例 1:

输入: A = [1,1], B = [2,2]
输出: [1,2]
解释: 
A和B只有交换[1, 2]能达到相同的糖果总数

样例 2:

输入: A = [2], B = [1,3]
输出: [2,3]
解释: 
A和B只有交换[2, 3]能达到相同的糖果总数

注意事项

  • 1 <= A.length <= 10000
  • 1 <= B.length <= 10000
  • 1 <= A[i] <= 100000
  • 1 <= B[i] <= 100000
  • 保证爱丽丝与鲍勃的糖果总量不同。
  • 答案肯定存在。
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param A: an array
    @param B: an array
    @return: an integer array
    """
    '''
    大致思路:
    1.两者糖果大小总和相减,然后根据i和i+(减数//2)分别判断是否存在A和B中,保证是存在的
    '''
    def fairCandySwap(self, A, B):
        res = self.getCandyL(A,B) if len(A) <= len(B) else self.getCandyL(B,A)[::-1]
        return res

    def getCandyL(self,l1,l2):
        #保证l2是大于l2的
        n = (sum(l2) - sum(l1))//2
        i = 1
        while True:
            if i in l1 and i+n in l2:
                return [i,i+n]
            i += 1

 

posted @ 2020-04-25 22:07  风不再来  阅读(121)  评论(0编辑  收藏  举报