Python程式:檢查能否將列表分成兩個和相等的子集?
假設我們有一個名為nums的數字列表,我們需要檢查是否可以將nums分成兩個和相等的子集。
因此,如果輸入類似於nums = [2, 3, 6, 5],則輸出將為True,因為我們可以建立如下子集:[2, 6]和[3, 5]。
為了解決這個問題,我們將遵循以下步驟:
total := nums中所有元素的總和
如果total是奇數,則
返回False
half := total / 2的整數部分
dp := 大小為half + 1的列表,並填充為false
dp[0] := true
對於nums中的每個num,執行:
對於從half到0的每個i(遞減),執行:
如果i >= num,則
dp[i] := dp[i] OR dp[i - num]
返回dp[half]
示例
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
廣告