สมมติว่า A และ B เป็นเพื่อนสองคน พวกเขามีแท่งลูกอมขนาดต่างกัน A[i] คือขนาดของแท่งลูกอมที่ i ของ A และ B[j] คือขนาดของแท่งลูกอมที่ j ของ B
เนื่องจากพวกเขาเป็นเพื่อน พวกเขาจึงต้องการแลกเปลี่ยนแท่งลูกอมหนึ่งแท่งแต่ละคน เพื่อให้หลังการแลกเปลี่ยน ทั้ง A และ B มีปริมาณลูกอมรวมเท่ากัน (ปริมาณลูกอมรวมของแต่ละคนคือผลรวมของขนาดแท่งลูกอมที่เขามี) เราต้องคืนค่าอาร์เรย์จำนวนเต็ม ans โดยที่ ans[0] คือขนาดแท่งลูกอมที่ A ต้องแลก และ ans[1] คือขนาดแท่งลูกอมที่ B ต้องแลก ถ้ามีคำตอบมากกว่าหนึ่งคำตอบ เราจะคืนค่าเพียงหนึ่งคำตอบ
เช่น ถ้า A = [1, 2] และ B = [2, 3] ผลลัพธ์จะเป็น [1, 2]
วิธีการแก้ปัญหา
- หาความต่างระหว่างผลรวมของ A และผลรวมของ B แล้วหารด้วย 2 และเอาส่วนจำนวนเต็มเก็บใน diff
- แปลง B เป็นเซต
- สำหรับ i ใน A:
- ถ้า i - diff อยู่ใน B ให้คืนค่า [i, i - diff]
ตัวอย่างโค้ด
class Solution(object):
def fairCandySwap(self, A, B):
diff = (sum(A) - sum(B)) // 2
B = set(B)
for i in A:
if i - diff in B:
return [i, i - diff]
ob1 = Solution()
print(ob1.fairCandySwap([1,2], [2,3]))
อินพุต
[1,2] [2,3]
เอาต์พุต
[1,2]