每日一題 LeetCode之分割等和子集

2021-10-03 18:49:17 字數 1004 閱讀 1087

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

注意:每個陣列中的元素不會超過 100

陣列的大小不會超過 200

示例 1:

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

輸出: true

解釋: 陣列可以分割成 [1, 5, 5] 和 [11].

思路:令陣列總和為sum,將問題轉換為0-1揹包,在陣列中挑選若干個數求總和是否為sum/2

本文提供兩種方法dfs和動態規劃

動態規劃求解0-1揹包問題,令dp[i][j]表示為前i個數是否存在和為j的組合。

當前數可以選

dp[i]

[j]=dp[i-1]

[j]||dp[i-1]

[j-nums[i]

]

當前數不能選

dp[i]

[j]=dp[i-1]

[j]

具體如下:

public

boolean

canpartition

(int

nums)

}return dp[nums.length]

[target]

;}

dfs解0-1揹包

public

boolean

canpartition

(int

nums)

public

boolean

can(

int[

] nums,

int sum,

int index)

LeetCode每日一題 分割等和子集

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

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...