11package arrays .findpairsequaltosum ;
22
33import java .util .ArrayList ;
4+ import java .util .HashMap ;
45import java .util .List ;
6+ import java .util .Map ;
57
68/**
79 * Write a program takes array input{1,0,2,3} and num =3.and
@@ -17,6 +19,9 @@ public class FindPairsEqualToSum {
1719
1820 private static int inputSum = 0 ;
1921
22+ /*
23+ * O(N power of 2) solution with O(1) space.
24+ * */
2025 public static List <String > findPairsForSum (int [] inputArray , int sum ) {
2126 List <String > list = new ArrayList <String >();
2227 List <Integer > inputList = new ArrayList <Integer >();
@@ -27,65 +32,32 @@ public static List<String> findPairsForSum(int[] inputArray, int sum) {
2732 int tempInt = sum - i ;
2833 if (inputList .contains (tempInt )) {
2934 String pair = String .valueOf (i + ", " + tempInt );
35+ System .out .print (i + ":" + tempInt + " , " );
3036 list .add (pair );
3137 }
3238 }
3339 return list ;
3440 }
3541
36- // public static List<String> findAllEqualToSum(int[] inputArray, int sum) {
37- // inputSum = sum;
38- // int currentIndex = 0;
39- // List<String> outputList = new ArrayList<String>();
40- // List<Integer> inputList = new LinkedList<Integer>();
41- // for (int i : inputArray) {
42- // inputList.add(i);
43- // }
44- // for (Integer currentInteger : inputList) {
45- // findAllEqualToSum(currentIndex, inputList, "", currentInteger, outputList);
46- //
47- // }
48- // return outputList;
49- // }
50- //
51- // private static void findAllEqualToSum(int currentIndex, List<Integer> inputArray, String inputString, int counter, List<String> outputList) {
52- // if (currentIndex == inputArray.size()) {
53- // return;
54- // }
55- // counter = counter + inputArray.get(currentIndex);
56- // inputString = inputString.concat(String.valueOf(inputArray.get(currentIndex))).concat(",");
57- // if (counter == inputSum) {
58- // outputList.add(inputString);
59- // }
60- // currentIndex++;
61- // findAllEqualToSum(currentIndex, inputArray, inputString, counter, outputList);
62- // }
63-
64- // static void sum_up_recursive(ArrayList<Integer> numbers, int target, ArrayList<Integer> partial) {
65- // int s = 0;
66- // for (int x : partial) s += x;
67- // if (s == target)
68- // System.out.println("sum(" + Arrays.toString(partial.toArray()) + ")=" + target);
69- // if (s >= target)
70- // return;
71- // for (int i = 0; i < numbers.size(); i++) {
72- // ArrayList<Integer> remaining = new ArrayList<Integer>();
73- // int n = numbers.get(i);
74- // for (int j = i + 1; j < numbers.size(); j++) remaining.add(numbers.get(j));
75- // ArrayList<Integer> partial_rec = new ArrayList<Integer>(partial);
76- // partial_rec.add(n);
77- // sum_up_recursive(remaining, target, partial_rec);
78- // }
79- // }
80- //
81- // static void sum_up(ArrayList<Integer> numbers, int target) {
82- // sum_up_recursive(numbers, target, new ArrayList<Integer>());
83- // }
84- //
85- // public static void main(String args[]) {
86- // Integer[] numbers = {3, 9, 8, 4, 5, 7, 10, 2};
87- // int target = 15;
88- // sum_up(new ArrayList<Integer>(Arrays.asList(numbers)), target);
89- // }
42+ /*
43+ * O(N) solution using additional space (map).
44+ * */
45+ public static List <String > findPairsForSumUsingMap (int [] inputArray , int sum ) {
46+ List <String > output = new ArrayList <>();
47+ Map <Integer , Integer > map = new HashMap <>();
48+ for (int value : inputArray ) {
49+ if (map .get (value ) == null ) {
50+ map .put (sum - value , value );
51+ } else {
52+ output .add (String .valueOf (map .get (value ) + ',' + value ) + " : " );
53+ System .out .print (String .valueOf (map .get (value )) + ":" + value + " , " );
54+ }
55+ }
56+ return output ;
57+ }
9058
59+ public static void main (String args []) {
60+ findPairsForSumUsingMap (new int []{2 , 4 , 0 , 1 , -2 }, 2 );
61+ findPairsForSum (new int []{2 , 4 , 0 , 1 , -2 }, 2 );
62+ }
9163}
0 commit comments