力扣 416 分割等和子集

2022-04-09 13:46:27 字數 835 閱讀 5295

最好用dp做,dfs會超時

package

leetcode;

/** dp動態規劃

* dp前先處理一下,對於下述兩種情況直接判false

* dp[i][j]表示下標在0..i之間的元素值之和是否等於j */

public

class

leetcode416 ;

boolean res =canpartition(nums);

system.out.println(res);

}public

static

boolean canpartition(int

nums)

if(sum % 2 == 1) return

false

;

int target = sum/2;

if(maxnum > target) return

false

;

boolean dp = new

boolean[nums.length][target + 1]; //

dp[i][j]表示下標在0..i之間的值之和是否等於j

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

dp[0][nums[0]] = true; //

其餘的dp[0][:]都是false

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

else}}

return dp[nums.length-1][target];

}}

力扣學習筆記 416 分割等和子集

題目 寫題過程 一開始想的是先排序,再從中間位置尋找兩邊是否相等,可是想了想,不行,很容易推翻,最後去看力扣題解學習了一波 演算法主體 這題是經典的np 完全問題 如果只有乙個元素,直接返回fasle 我們可以把問題轉換為,尋找陣列內是否有資料可以組成所有資料總和的一半。這樣我們就可以轉換為 0 1...

416 分割等和子集

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

416 分割等和子集

主要題目中說了不超過100個數字,數字都不超過200。所以可能的和不會超過20000,這個量級對計算機來說不算大,所以考慮用dp考察每個可能的和是否存在。class solution int sum accumulate nums.begin nums.end 0 if sum 1 int siz ...