Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การแลกเปลี่ยนลูกอมอย่างเป็นธรรมใน Python

สมมติว่า 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]