leetcode416 分割等和子集

2021-09-23 18:27:38 字數 714 閱讀 3311

參考:

動態規劃+空間優化:

dp[i][j]表示從第乙個元素到第i個元素是否存在能組成和為j的子集,如果可以為true,否則為false。

dp[i]

[j]= dp[i -1]

[j]|| dp[i -1]

[j - nums[i]];

//兩者裡有乙個為真,那麼結果就為真

對於每個元素,有兩種處理方法,要麼取要麼不取。

假設不取第i個元素,那麼需要前i-1個元素構成和為j

假設取第i個元素,那麼需要錢i-1個元素構成和為j-nums[i]

在進行空間複雜度優化的時候,用一維陣列代替二維陣列,其中一維陣列儲存著上乙個i的狀態值。(這部分其實沒看太明白)

遞迴:

class solution 

if(sum%2)

return false;

sum /=2

;sort

(nums.

rbegin()

,nums.

rend()

);return

helper

(nums, sum,0)

;}bool helper

(vector<

int>

& nums,

int sum,

int index)

};

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...