Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find a pair of elements from an array whose sum equals a given number

Tags:

algorithm

Given array of n integers and given a number X, find all the unique pairs of elements (a,b), whose summation is equal to X.

The following is my solution, it is O(nLog(n)+n), but I am not sure whether or not it is optimal.

int main(void) {     int arr [10] = {1,2,3,4,5,6,7,8,9,0};     findpair(arr, 10, 7); } void findpair(int arr[], int len, int sum) {     std::sort(arr, arr+len);     int i = 0;     int j = len -1;     while( i < j){         while((arr[i] + arr[j]) <= sum && i < j)         {             if((arr[i] + arr[j]) == sum)                 cout << "(" << arr[i] << "," << arr[j] << ")" << endl;             i++;         }         j--;         while((arr[i] + arr[j]) >= sum && i < j)         {             if((arr[i] + arr[j]) == sum)                 cout << "(" << arr[i] << "," << arr[j] << ")" << endl;             j--;         }     } } 
like image 425
Gin Avatar asked Jan 18 '11 03:01

Gin


People also ask

How do you find all pairs of elements in an array whose sum is equal to a given number in Java?

How to find all pairs of elements in Java array whose sum is equal to a given number? Add each element in the array to all the remaining elements (except itself). Verify if the sum is equal to the required number. If true, print their indices.

How do you find all pairs of elements in C array whose sum is equal to a given number?

C program to find a pair of number whose sum is K using hash table. Sort inputArray using any O(nLogn) time sorting algorithm. Initialize leftIndex and rightIndex to 0 and N-1 respectively. If inputArray[leftIndex] + inputArray[rightIndex] is equal to K, then we found a pair.

How do you find the pair elements of an array?

In order to find all the possible pairs from the array, we need to traverse the array and select the first element of the pair. Then we need to pair this element with all the elements in the array from index 0 to N-1. Below is the step by step approach: Traverse the array and select an element in each traversal.


2 Answers

There are 3 approaches to this solution:

Let the sum be T and n be the size of array

Approach 1:
The naive way to do this would be to check all combinations (n choose 2). This exhaustive search is O(n2).

Approach 2: 
 A better way would be to sort the array. This takes O(n log n)
Then for each x in array A, use binary search to look for T-x. This will take O(nlogn).
So, overall search is  O(n log n)

Approach 3 :
The best way would be to insert every element into a hash table (without sorting). This takes O(n) as constant time insertion.
Then for every x, we can just look up its complement, T-x, which is O(1).
Overall the run time of this approach is O(n).


You can refer more here.Thanks.


like image 86
kinshuk4 Avatar answered Sep 19 '22 03:09

kinshuk4


# Let arr be the given array. # And K be the give sum   for i=0 to arr.length - 1 do   # key is the element and value is its index.   hash(arr[i]) = i   end-for  for i=0 to arr.length - 1 do   # if K-th element exists and it's different then we found a pair   if hash(K - arr[i]) != i       print "pair i , hash(K - arr[i]) has sum K"   end-if end-for 
like image 39
codaddict Avatar answered Sep 19 '22 03:09

codaddict