File tree 1 file changed +12
-9
lines changed
src/main/java/com/thealgorithms/dynamicprogramming 1 file changed +12
-9
lines changed Original file line number Diff line number Diff line change @@ -13,24 +13,27 @@ private SubsetSum() {
13
13
*/
14
14
public static boolean subsetSum (int [] arr , int sum ) {
15
15
int n = arr .length ;
16
- boolean [][] isSum = new boolean [n + 1 ][sum + 1 ];
17
16
18
- // Initialize the first column to true since a sum of 0 can always be achieved with an empty subset.
19
- for (int i = 0 ; i <= n ; i ++) {
20
- isSum [i ][0 ] = true ;
21
- }
17
+ //Intialize Two Arrays to store current and prev states
18
+ boolean [] isSumCurr = new boolean [sum + 1 ];
19
+ boolean [] isSumPrev = new boolean [sum +1 ];
20
+
21
+ // Mark prev[0] = true as it is true to make sum = 0
22
+ // using 0 elements
23
+ isSumPrev [0 ] = true ;
22
24
23
25
// Fill the subset sum matrix
24
26
for (int i = 1 ; i <= n ; i ++) {
25
- for (int j = 1 ; j <= sum ; j ++) {
27
+ for (int j = 0 ; j <= sum ; j ++) {
26
28
if (arr [i - 1 ] <= j ) {
27
- isSum [ i ][ j ] = isSum [ i - 1 ][ j ] || isSum [ i - 1 ] [j - arr [i - 1 ]];
29
+ isSumCurr [ j ] = isSumPrev [ j ] || isSumPrev [j - arr [i - 1 ]];
28
30
} else {
29
- isSum [ i ][ j ] = isSum [ i - 1 ] [j ];
31
+ isSumCurr [ j ] = isSumPrev [j ];
30
32
}
31
33
}
34
+ isSumPrev = isSumCurr .clone ();
32
35
}
33
36
34
- return isSum [ n ] [sum ];
37
+ return isSumPrev [sum ];
35
38
}
36
39
}
You can’t perform that action at this time.
0 commit comments