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

โปรแกรมตรวจสอบว่าเราสามารถสร้างกลุ่มของสองพาร์ติชั่นที่มีผลรวมเท่ากันหรือไม่ใน Python?


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราต้องตรวจสอบว่าเราสามารถแบ่งตัวเลขออกเป็นสองกลุ่มโดยที่ผลรวมขององค์ประกอบในทั้งสองกลุ่มเหมือนกันหรือไม่

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[2, 3, 6, 5] ผลลัพธ์จะเป็น True เนื่องจากเราสร้างกลุ่มได้ดังนี้ [2, 6] และ [3, 5]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้

  • ทั้งหมด :=ผลรวมขององค์ประกอบทั้งหมดเป็น nums

  • ถ้าผลรวมเป็นเลขคี่

    • คืนค่าเท็จ

  • half :=ส่วนของจำนวนเต็ม / 2

  • dp :=รายการขนาด half + 1 และเติม false

  • dp[0] :=จริง

  • สำหรับแต่ละ num เป็น num ทำ

    • สำหรับฉันในช่วงครึ่งถึง 0 ลดลง 1 ทำ

      • ถ้า i>=num แล้ว

        • dp[i] :=dp[i] หรือ dp[i - num]

  • กลับ dp[ครึ่ง]


ตัวอย่าง

class Solution:
   def solve(self, nums):

      total = sum(nums)

      if total & 1:
         return False

      half = total // 2

      dp = [True] + [False] * half
      for num in nums:
         for i in range(half, 0, -1):
            if i >= num:
               dp[i] |= dp[i - num]

      return dp[half]

ob = Solution()
nums = [2, 3, 6, 5]
print(ob.solve(nums))

อินพุต

[2, 3, 6, 5]

ผลลัพธ์

True