package com.interview.array; /** * This solution is incorrect. It is greedy approach which will not work * e.g 1,6,6,8,9,10 - Result should be 1,9,10 and 6,6,8 but it will not give this result * since it will greedily break 9 and 10 into different sets * * INCORRECT SOLUTION.(Still keeping the code in case I can improve it) * */ import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class DivideNumbersInEqualGroupWithClosestSum { public void divide(int arr[],List<Integer> list1, List<Integer> list2){ Arrays.sort(arr); int len = arr.length; int sum1 = 0; int sum2 = 0; for(int i = len-1 ; i >=0; i--){ if((sum1 < sum2 && list1.size() < len/2) || (list2.size() >= len/2)){ list1.add(arr[i]); sum1 = sum1 + arr[i]; }else{ list2.add(arr[i]); sum2 = sum2 + arr[i]; } } } public static void main(String args[]){ List<Integer> list1 = new ArrayList<Integer>(); List<Integer> list2 = new ArrayList<Integer>(); int arr[] = {15,14,13,1,3,2,}; int arr1[] = {23, 45, 34, 12,11, 98, 99, 4, 189, 1,7,19,105, 201}; DivideNumbersInEqualGroupWithClosestSum dn = new DivideNumbersInEqualGroupWithClosestSum(); dn.divide(arr, list1, list2); System.out.println(list1); System.out.println(list2); list1.clear(); list2.clear(); dn.divide(arr1, list1, list2); System.out.println(list1); System.out.println(list2); } }