Partition Equal Subset Sum
Problem
Given a non-empty array nums
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.
Solution Approach
Expected Time complexity:
Click - to see solution code
- C++
class Solution {
public:
bool canPartition(vector<int>& nums) {
int n = nums.size();
int sm = 0;
for (int i = 0; i < n; i++) sm += nums[i];
if (sm % 2) return 0;
sm /= 2;
sort(nums.begin(), nums.end());
vector<vector<int>> knap(nums.size() + 1, vector<int>(sm + 1));
for (int i = 1; i <= nums.size(); i++) {
for (int j = 1; j <= sm; j++) {
if (nums[i - 1] > j) {
knap[i][j] = max(knap[i - 1][j], knap[i][j - 1]);
continue;
}
knap[i][j] =
max(knap[i][j], knap[i - 1][j - nums[i - 1]] + nums[i - 1]);
knap[i][j] = max(knap[i][j], knap[i - 1][j]);
knap[i][j] = max(knap[i][j], knap[i][j - 1]);
}
}
return knap[nums.size()][sm] == sm;
}
};