Write a program which divides a given array into two sets so that the difference between sum of each sets is minimal.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class NumSets {
public static void main(String[] args) {
int[] sets = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sumSet1 = 0;
int sumSet2 = 0;
Arrays.sort(sets);
List<Integer> set1 = new ArrayList<Integer>();
List<Integer> set2 = new ArrayList<Integer>();
int j = 0;
int k = sets.length - 1;
for (int i = 1; i <= sets.length / 2; i++) {
if (i == sets.length / 2 && sets.length % 2 == 0) {
set1.add(sets[j]);
set2.add(sets[k]);
break;
}
if (i % 2 == 0) {
set1.add(sets[j]);
set1.add(sets[k]);
sumSet1 = sumSet1 + sets[j] + sets[k];
} else {
set2.add(sets[j]);
set2.add(sets[k]);
sumSet2 = sumSet2 + sets[j] + sets[k];
}
j++;
k--;
}
if (sets.length % 2 != 0) {
if (sumSet1 < sumSet2)
set1.add(sets[(sets.length / 2)]);
else
set2.add(sets[(sets.length / 2)]);
}
System.out.println("set1 -> " + set1);
System.out.println("set2 -> " + set2);
}
}