主要題目中說了不超過100個數字,數字都不超過200。所以可能的和不會超過20000,這個量級對計算機來說不算大,所以考慮用dp考察每個可能的和是否存在。
class
solution
int sum=
accumulate
(nums.
begin()
,nums.
end(),
0);if
(sum&1)
int siz=nums.
size()
; vector<
bool
>
dp(sum/2+
1,false);
for(
int i=
0;i1;
++i)
for(
int i=
1;i++i)}}
return dp.
back()
;}};
2.dfs
偷懶截的別人的
要注意剪枝,並且先排序,要從大的開始選。如果從小的開始選會多很多可能。
class
solution
bool
canpartition
(vector<
int>
& nums)
};
416 分割等和子集
給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出 fals...
416 分割等和子集
題目描述 給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 示例 1 輸入 1,5,11,5 輸出 true 解釋 陣列可以分割成 1,5,5 和 11 示例 2 輸入 1,2,3,5 輸出...
416 分割等和子集
給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。注意 每個陣列中的元素不會超過 100 陣列的大小不會超過 200 判斷所給陣列是否滿足條件,若陣列中任意數字和為總和二分之一 總和必須為偶數 則為true class solution def canpar...