日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--416. 分割等和子集

發布時間:2024/7/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--416. 分割等和子集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

注意:

每個數組中的元素不會超過 100
數組的大小不會超過 200
示例 1:

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

輸出: true

解釋: 數組可以分割成 [1, 5, 5] 和 [11].
?

示例?2:

輸入: [1, 2, 3, 5]

輸出: false

解釋: 數組不能分割成兩個元素和相等的子集.

思路:從數組中選取一些元素使他的和等于總和的一半,類似于背包問題

通過dp[][]來記錄狀態

dp[i][j]:表示選取范圍為[0,i-1]的條件下和為j的情況

dp[i][j]狀態與兩個元素有關

1. dp[i-1][j],在[0,i-1]的情況下選取的元素和為j,不選取第i個元素,和仍為j

2. dp[i-1][j-nums[i]],選取第i個元素,那么如果之前存在和為j-nums[i]的情況,就說明和為j的情況存在

提交的代碼:

class?Solution?{

????public?boolean?canPartition(int[]?nums)?{

????????int?i,sum=0;

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

????????{

????????????sum+=nums[i];

????????}

????????if(sum%2!=0)

????????{

????????????return?false;

????????}

????????int?target?=?sum/2;

????????boolean?dp[][]?=?new?boolean[nums.length][target+1];

????

????????if(nums[0]<=target)

????????{

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

????????}

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

????????{

????????????for(int?j=0;j<=target;j++)

????????????{

????????????????dp[i][j]?=?dp[i-1][j];

????????????????if(j>=nums[i])

????????????????{

????????????????????dp[i][j]?=?dp[i-1][j]?||?dp[i-1][j-nums[i]];

????????????????}

????????????}

????????}

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

????????{

????????????if(dp[i][target])

????????????{

????????????????return?true;

????????????}

????????}

????????return?false;

????}

}

總結

以上是生活随笔為你收集整理的Leetcode--416. 分割等和子集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。