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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP