給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。
示例 1
:輸入:[1
,5,11
,5]輸出:
true
解釋: 陣列可以分割成 [1,
5,5] 和 [11]
.示例 2
:輸入:[1
,2,3
,5]輸出:
false
解釋: 陣列不能分割成兩個元素和相等的子集.
思路:
1.首先求陣列總和sum,如果sum為奇數,那麼肯定不能拆分。
2.建立乙個boolean
dp二維陣列,陣列中元素 dp[i]
[j]:表示從陣列的 [
0, i] 這
個子區間內挑選一些正整數,每個數只能用一次,使得這些數的和等於 j。
3.首先肯定得初始化第一行,nums[
0]如果小於target,那麼肯定得初始化成true。
4.然後
如果選擇:dp[i]
[j]= dp[i -1]
[j - nums[i]];
如果不選擇:dp[i]
[j]= dp[i -1]
[j];
前提條件很明顯就是:j >= nums[i]
5.最終結果就是 dp[size -1]
[target] 處。
class
solutionif(
(sum &1)
==1)int target = sum >>1;
boolean
dp =
newboolean
[size]
[target +1]
;for
(int i =
0; i <= target; i++)}
for(
int i =
1; i < size; i++
)else}}
return dp[size -1]
[target];}
}
分割等和子集
給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 fals...
分割等和子集 力扣
題意理解 給定乙個陣列,求將其分成兩組,是否存在兩組內部元素的和相等。問題分析 動規問題轉化為 給定一組元素,求是否存在這組元素中任意數量的元素加起來和等於這組元素的和的一半?其他鏈結 bool canpartition vector nums sum sum 2 int count nums.si...
力扣分割等和子集
給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 fals...