LeetCode Partition Equal Subset Sum

原题链接在这里:https://leetcode.com/problems/partition-equal-subset-sum/description/

题目:

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.

Note:

  1. Each of the array element will not exceed 100.
  2. The array size will not exceed 200.

Example 1:

Input: [1, 5, 11, 5]

Output: true

Explanation: The array can be partitioned as [1, 5, 5] and [11].

Example 2:

Input: [1, 2, 3, 5]

Output: false

Explanation: The array cannot be partitioned into equal sum subsets.

题解:

DP问题. 其实是找有没有sub array的数字和是sum(nums)/2. 存储到第 i 个数能不能合成 j.

地推公式dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i]]. 两种情况,一种是不用当前的数字nums[i]. 就看之前的数字能不能合成j, dp[i-1][j]. 另一种是用当前的数字nums[i], 看之前的数字能不能合成j-nums[i], dp[i-1][j-nums[i]].

初始化dp[i][0]不论用几个数,总能合成0.

优化空间可用一维数组. 但注意循环从后往前,因为新的iteration 会用到旧的iteration 当前位置前面的值.

Time Complexity: O(sum*nums.length). sum = sum(nums)/2.

Space: O(sum).

AC Java:

 1 class Solution {
 2     public boolean canPartition(int[] nums) {
 3         if(nums == null || nums.length == 0){
 4             return true;
 5         }
 6
 7         int sum = 0;
 8         for(int num : nums){
 9             sum += num;
10         }
11
12         return sum%2==1 ? false : subSum(nums, sum/2);
13     }
14
15     private boolean subSum(int [] nums, int sum){
16         boolean [] dp = new boolean[sum+1];
17         dp[0] = true;
18         for(int num : nums){
19             for(int i = sum; i>=num; i--){
20                 dp[i] = dp[i] || dp[i-num];
21             }
22         }
23         return dp[sum];
24     }
25 }

类似Target Sum 的Method 2.

时间: 2024-11-08 20:35:30

LeetCode Partition Equal Subset Sum的相关文章

[LeetCode] Partition Equal Subset Sum 相同子集和分割

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Both the array size and each of the array element will not exceed 100. Exam

Leetcode 416. Partition Equal Subset Sum

416. Partition Equal Subset Sum Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 1

LN : leetcode 416 Partition Equal Subset Sum

lc 416 Partition Equal Subset Sum 416 Partition Equal Subset Sum Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of th

[动态规划] leetcode 416 Partition Equal Subset Sum

problem:https://leetcode.com/problems/partition-equal-subset-sum/ 经典背包问题.找到是否存在恰好装满sum / 2的物体,可以优化为1D的. class Solution { public: bool canPartition(vector<int>& nums) { int n = nums.size(); int sum = accumulate(nums.begin(), nums.end(), 0); if (s

416. Partition Equal Subset Sum

Problem statement: Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 100. The array

Partition Equal Subset Sum

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 100. The array size will not exce

算法-Partition Equal Subset Sum(动态规划)

一直以来,动态规划是我的问题,今天看到了一道动态规划的题,做了好久,也思考了好久,借鉴别人的代码才把这个问题理解到. 题意: Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. 样例: Given nums = [

LC 416. Partition Equal Subset Sum

题目 Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 100. The array size will not e

[LeetCode] 416. Partition Equal Subset Sum_Medium tag: backpack

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Note: Each of the array element will not exceed 100. The array size will not exce