Interview Questions

Coding Problem - 1

Write a program which divides a given array into two sets so that the difference between sum of each sets is minimal.

package com.test;

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);
        }

}