**Problem :- **

Given an array with **'n'** elements & a value **'x'**,
find two elements in the array which sums to **'x'**.

Consider the array **{ 37, 19, 4, 87, 21 }** & a target value **25**.

Two elements wich sums to **25** are **4** & **21**
.

**Solution :- **

**Approach 1** :: Using **Sort**.

Sort the elements and
starting checking from the beginning of the array for the required pair. See the implementation below [ **O(n*(log n))** **complexity** if we use the best sorting algorithm ]

**Approach 2** :: Using a **hash map**.

We will initialize a **hash_map** of a large size (s.t all elements of the array are within this range) with all **0**s.

As we iterate over the given array from **i = 0 ... n-1**,

we will set **hash_map[target-arr[i]] = 1**.
If at any point of time, we find an already **set** index, then we have found the two elements.

See the implementation below [ **O(n)** time **complexity** ]

**#include<iostream>
#include<algorithm>**
**#define MAX 100000**
**using namespace** std;
*/*************** Method 1(Using Sort) **********************
We are using the STL sort function since we are interested
in the actual logic and not the sort function implementation
************************************************************/*
**bool** isPairPresent1(**int** arr[], **int** size, **int** target) {
**int** start, end;
*// sort the array*
sort(arr,arr+size);
start = 0;
end = size-1;
**while**(start < end) {
*// start checking from the max and min values *
**if** (arr[start] + arr[end] == target) {
**return** target;
}
**else if** (arr[start] + arr[end] < target) {
start++;
}
**else** {
end--;
}
}
**return false**;
}
*/*************** Method 2(Using Hashmap) **********************
This implementation works for positive integers only
**************************************************************/*
**bool** isPairPresent2(**int** arr[], **int** size, **int** target) {
**int** i, val;
**bool** hash_map[MAX] = {0}; *//initialize hash map as 0*
**for**(i = 0; i < size; i++) {
val = target - arr[i];
**if**(val >= 0 && hash_map[val] == 1) {
**return true**;
}
* // set the hash index of the value
// this denotes 'value' is present in the array
// for e.g. if arr[i] = 5, hash_map[5] = 1*
hash_map[arr[i]] = 1;
}
**return false**;
}
*// main*
**int** main() {
*//int arr[] = {7,-8,57, 6, 10, -4};*
**int** arr[] = {37,19,4,87,23};
**int** size = **sizeof**(arr)/**sizeof**(arr[0]);
**int** target = 23;
**if** (isPairPresent1(arr, size, target))
cout<<"\nArray has two elements which sums to "<<target;
**else**
cout<<"\nArray doesn't have a pair which sums to "<<target;
cout<<endl;
**return** 0;
}