Given an array A[] and a number x, check for pair in A[] with sum as x
Write a C program that, given an array A[] of n numbers and another number x, determines whether or not there exist two elements in S whose sum is exactly x.
There can be several ways to do, what we found are two methods.
1 ) Using Sort input Array 2) Using Hash Map
Algorithm with Example with Sorting Array
findPair (A[], sum) //A = {1, 4, 6, 9, -3 , 12, 2} //sum = 10 1) len = Length of A[] //len = 8 2) Sort the array in increasing order. //A = {-3,1,2,3,4,6,9,12} 3) Initialize two variables on starting and ending (a) Initialize first to the leftmost index: lt = 0 (b) Initialize second the rightmost index: rt = len-1 4) Loop while lt < rt. (a) If (A[l] + A[r] == sum) then return 1 (b) Else if( A[l] + A[r] < sum ) then lt++ (c) Else rt-- //First Iteration: //a)lt=0 , rt=7 , -3+12 != 10 //b)-3+12 = 9 < 10 =>; lt=lt++ =>; lt = 1. //Second Iteration : //a) lt=1, rt =7 , 1+12 !=10 //b) 1+12 =13 > 10, =>; rt=len-1=>; rt=6 //Third Iteration : //a)lt=1, rt=6 , 1+9 =10 =>; Return 1. 5) No candidates in whole array : return 0
Time Complexity : O(nlogn) (for merge if Merge or Heap sort is used.)
Space Complexity : O(n)( for Merge sort) O(1) for heap sort.
Algorithm with Example for Using Hash map
Let A be the given array. And X be the give sum len = A.length for i=0 to len{ hash(A[i]) = i // key is the element and value is its index. } //Hash is created with index and element. for i=0 to len{ if hash(X - A[i]) != j // if (X - element) exists and is different we found a pair { print "pair i , j has sum K" }//if }//for
Searching in Hash takes O(1).
So what we do is
take first element and if its counter number which makes sum X exists then print both number.
example
A = {-3,1,2,3,4,6,9,12} A[0] = -3 What we search in condition if hash(X - A[i]) != i if(10-(-3))=13 exist for some 'j' then element at i (=-3) and j(=13) makes sum 10.
Time Complexity : O(N)
Space Complexity : O(N) for storing Hash.