leetcode 416 分割等和子集

2021-10-23 03:20:43 字數 930 閱讀 9885

題目描述:

給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。

輸入: [1, 5, 11, 5]

輸出: true

解釋: 陣列可以分割成 [1, 5, 5] 和 [11].

解題步驟:需要所選則子集之和等於總和一半即可。

1、 狀態定義:dp[i][j]表示從陣列的 [0, i] 這個子區間內挑選一些正整數,每個數只能用一次,使得這些數的和恰好等於 j,其值為true或者false。

2、 狀態轉移方程

3、 初始化:dp[0][0] = false,因為是正整數,當然湊不出和為 0。

4、 輸出:dp[nums.length][ba**],這裡 nums.length表示陣列的長度,ba**是陣列的元素之和(必須是偶數)的一半。

**

public boolean canpartition(int nums) 

if(ba**%2!=0)

return false;

ba** /= 2;

boolean dp = new boolean[nums.length][ba**+1];

for (int i = 1; i < nums.length; i++)

else

}} return dp[nums.length-1][ba**];

}

leetcode 416 分割等和子集

方法一 用動態規劃 class solution return res half 方法二 利用遞迴,dfs 此方法較動態規劃要好很多 基本思想 舉例子說明最容易理解,例如 nums 1,5,4,3,7 第一步 對陣列進行排序,nums 1,3,4,5,7 求出其和的一半 half 10 對於陣列中元...

LeetCode416 分割等和子集

主要的思想 於0 1揹包問題,解決方法是動態規劃。我們可以想到,把陣列分割成兩份,並且和相等,那麼每乙份的和是總和的一半。那麼問題就可以轉化為找到一組數,使得他們的和逼近sum 2,最後判斷最大的和是否等於sum 2,如果是則說明存在這樣的組合,也就是存在子集。其和為sum 2,當然了另乙個集合的和...

LeetCode416 分割等和子集

題目 給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 f...