Leetcode 888 公平的糖果棒交換

2021-10-18 13:46:49 字數 1979 閱讀 5709

三、總結

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

因為他們是朋友,所以他們想交換一根糖果棒,這樣交換後,他們都有相同的糖果總量。(乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。)返回乙個整數陣列 ans,其中 ans[0] 是愛麗絲必須交換的糖果棒的大小,ans[1] 是 bob 必須交換的糖果棒的大小。

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

記愛麗絲的糖果棒的總大小為suma,鮑勃的糖果棒的總大小為 sumb。設所求為 ,即愛麗絲的大小為 x 的糖果棒與鮑勃的大小為 y 的糖果棒交換,則有如下等式:suma - x + y =sumb + x - y 化簡,得:x = y + ((suma - sumb)/ 2 )。

即對於 b 中的任意乙個數 y』,只要 a 中存在乙個數 x』,滿足 x』 = y』 + ((suma - sumb)/ 2 )。那麼 即為一組可行解。

為了快速查詢 a 中是否存在某個數,我們可以先將 a 中的數字存入雜湊表中。然後遍歷 bb 序列中的數 y』,在雜湊表中查詢是否有對應的 x』。

**如下(示例):

struct hashtable 

;int

*faircandyswap

(int

* a,

int asize,

int* b,

int bsize,

int* returnsize)

for(

int i =

0; i < bsize; i++

)int delta =

(suma - sumb)/2

;struct hashtable* hashtable =

null

;for

(int i =

0; i < asize; i++)}

int* ans =

malloc

(sizeof

(int)*

2);for

(int i =

0; i < bsize; i++)}

return ans;

}

記愛麗絲的糖果棒的總大小為suma,鮑勃的糖果棒的總大小為 sumb。設所求為 ,即愛麗絲的大小為 x 的糖果棒與鮑勃的大小為 y 的糖果棒交換,則有如下等式:suma - x + y =sumb + x - y 化簡,得:x = y + ((suma - sumb)/ 2 )。

即對於 b 中的任意乙個數 y』,只要 a 中存在乙個數 x』,滿足 x』 = y』 + ((suma - sumb)/ 2 )。那麼 即為一組可行解。

因為答案必然存在,我們可以將a與b按公升序進行排序,利用雙指標記錄當前a[i]與b[j]的資訊,通過與(suma - sumb)/ 2 進行比較判斷當前指標指向的一組糖果棒是否為可行解。

**如下(示例):

int cmp (

const

void

* a,

const

void

*b)int

*faircandyswap

(int

* a,

int asize,

int* b,

int bsize,

int* returnsize)

for(

int i =

0;i < bsize;i++

)int diff =

(suma - sumb)/2

;int i =

0,j =0;

while

(i < asize && j else

if(a[i]

- b[j]

< diff)

else

}return ans;

}

官方認定為簡單題,解題相關思路還蠻有意思的,雜湊表永遠滴神!

LeetCode 888 公平的糖果交換

leetcode習題答案彙總 題目 愛麗絲和鮑勃有不同大小的糖果棒 a i 是愛麗絲擁有的第 i 塊糖的大小,b j 是鮑勃擁有的第 j 塊糖的大小。因為他們是朋友,所以他們想交換乙個糖果棒,這樣交換後,他們都有相同的糖果總量。乙個人擁有的糖果總量是他們擁有的糖果棒大小的總和。返回乙個整數陣列 an...

leetcode 888 公平的糖果棒交換

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

leetcode 888 公平的糖果棒交換

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