


You are given an array 'ARR' of 'N' positive integers. Your task is to find if we can partition the given array into two subsets such that the sum of elements in both subsets is equal.
For example, let’s say the given array is [2, 3, 3, 3, 4, 5], then the array can be partitioned as [2, 3, 5], and [3, 3, 4] with equal sum 10.
Follow Up:
Can you solve this using not more than O(S) extra space, where S is the sum of all elements of the given array?
The first line of input contains an integer 'T' representing the number of test cases or queries to be processed.
Then the test case follows.
The first line of each test case contains an integer 'N', denoting the size of the array.
The second line of each test case contains 'N' single space-separated integers representing the array elements.
Output Format:
For each test case, print “true” or “false” denoting whether we can partition into two equal subset-sum or not, in a separate line.
Note:
You do not need to print anything; it has already been taken care of. Just implement the given function.
1 <= 'T' <= 10
1 <= 'N' <= 100
1 <= 'ARR'[i] <= 100
Time Limit: 1 sec
2
6
3 1 1 2 2 1
5
5 6 5 11 6
true
false
For the first test case, the array can be partitioned as ([2,1,1,1] and [3, 2]) or ([2,2,1], and [1,1,3]) with sum 5.
For the second test case, the array can’t be partitioned.
2
9
2 2 1 1 1 1 1 3 3
6
8 7 6 12 4 5
false
true
Think of brute force and try to generate all the possible subsets of the array, and check if its sum is equal to totalSum/2, where totalSum represents the sum of all elements in an array.
Approach: The key point to notice here is that we have to partition an array into two equal subsets sum so two equal subsets must have the sum equal to 'TOTALSUM'/2, where 'TOTALSUM' represents the sum of all elements in the given array, and also 'TOTALSUM' should be even as we cant partitioned an array into two equal if 'TOTALSUM' is odd, So now the problem is to check if there is any subset in a given array with sum 'TOTALSUM'/2. And now this problem is similar to the classical 0/1 Knapsack Problem in which in the recursion call at any index, we have two choices whether to include that element in sum or exclude that element. Now if we choose the current number to add to the sum then recur for index 'I'+1 or If we don’t choose the current index element to sum then recur for index 'I'+1 and this way we check if there is a subset with sum 'TOTALSUM'/2 in the given array.
Steps:
Boolean 'CANPARTITIONUTIL'('ARR', 'CURRENTINDEX','SUBSETSUM')
O(2 ^ N), where ‘N’ is the size of the array.
In the worst case, we will find the sum of all elements in the given array takes O(N) time. For every index of the given array, we have two choices i.e either to include that element or exclude the element in subset-sum. Hence the overall complexity will be O(2 ^ N).
O(N), where ‘N’ is the size of the array.
In the worst case, extra space is required for the recursion stack.