888 公平的糖果棒交換

2021-10-18 14:48:10 字數 1354 閱讀 7394

題目描述:愛麗絲和鮑勃有不同大小的糖果棒:a[i] 是愛麗絲擁有的第 i 根糖果棒的大小,b[j] 是鮑勃擁有的第 j 根糖果棒的大小。

因為他們是朋友,所以他們想交換一根糖果棒,這樣交換後,他們都有相同的糖果總量。(乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。)

返回乙個整數陣列 ans,其中 ans[0] 是愛麗絲必須交換的糖果棒的大小,ans[1] 是 bob 必須交換的糖果棒的大小。

如果有多個答案,你可以返回其中任何乙個。保證答案存在。

解題思路:因為一定有可行解,那麼我們可以知道可行解之差肯定為兩個人原來糖果總數之差的二分之一,只有這樣在交換之後才能拿到相同的糖果數,我們只需要找出一對這樣的糖果大小即可,為了減小時間複雜度,先對兩個陣列都進行排序,這樣在查詢的時候就可以同時往乙個方向查詢,不需要遍歷兩個陣列中的所有數對,**如下:

class

solution

:def

faircandyswap

(self, a: list[

int]

, b: list[

int])-

> list[

int]

: a.sort(

) b.sort(

) suma =

sum(a)

sumb =

sum(b)

lena, lenb =

len(a)

,len

(b)if suma < sumb:

diff =

(sumb - suma)//2

j =0for i in

range

(lena)

:while

(j < lenb and b[j]

< a[i]

+diff)

: j +=

1if a[i]

+ diff == b[j]

:return

[a[i]

, b[j]

]else

: diff =

(suma - sumb)//2

j = lenb -

1for i in

range

(lena-1,

-1,-

1):while

(j >=

0and b[j]

+diff > a[i]):

j -=

1if b[j]

+ diff == a[i]

:return

[a[i]

, b[j]

]

888 公平交換糖果棒

愛麗絲和鮑勃有不同大小的糖果棒 a i 是愛麗絲擁有的第 i 根糖果棒的大小,b j 是鮑勃擁有的第 j 根糖果棒的大小。因為他們是朋友,所以他們想交換一根糖果棒,這樣交換後,他們都有相同的糖果總量。乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。返回乙個整數陣列 ans,其中 ans 0 是愛麗...

888 公平的糖果棒交換

愛麗絲和鮑勃有不同大小的糖果棒 a i 是愛麗絲擁有的第i根糖果棒的大小,b j 是鮑勃擁有的第j根糖果棒的大小。因為他們是朋友,所以他們想交換一根糖果棒,這樣交換後,他們都有相同的糖果總量。乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。返回乙個整數陣列ans,其中ans 0 是愛麗絲必須交換的...

888 陣列 公平的糖果棒交換

愛麗絲和鮑勃有不同大小的糖果棒 a i 是愛麗絲擁有的第 i 根糖果棒的大小,b j 是鮑勃擁有的第 j 根糖果棒的大小。因為他們是朋友,所以他們想交換一根糖果棒,這樣交換後,他們都有相同的糖果總量。乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。返回乙個整數陣列 ans,其中 ans 0 是愛麗...