Solution Description:
This problem can be solved in 2 different ways.
Solution 1: Brute Force Technique
Explanation: In this technique, we shall be taking 2 loops. Outer Loop and Inner Loop.
Step 1: First take the first element of the outer loop and add it to every other element from the inner loop array. And check if the sum is equal to the “key”. If it matches we return from the loop.
Step 2: Else we go for the second element and add it to every other element of the inner loop.
We continue the above steps until we reach the end of the outer loop. If we get a match program will return 1 else, it will return 0.
Example:
Take the array [1,2,3,4] and “key” is 7.
Pass 1:
1 + 2 = 3 false
1 + 3 = 4 false
1 + 4 = 5 false
Pass 2:
2 + 3 = 5 false.
2 + 4 = 6 false.
Pass 3:
3 + 4 = 7 true.
Time Complexity:
Since the program is using 2 for loops, the time complexity will be O(n^2).
Solution in C language:
# include <stdio.h>
int checkSum(int arr[], int arr_size, int key)
{
int i = 0;
int j = 0;
int sum = 0;
for (int i = 0; i < arr_size; ++i)
{
for (int j = i+1 ; j < arr_size; ++j)
{
sum = arr[i] + arr[j];
if (sum == key)
{
return 1;
}
}
}
return 0;
}
int main()
{
int array[] = {1,2,3,4,5,6};
int key = 11;
int array_size = 6;
if(checkSum(array, array_size, key))
printf("Array has two elements with given key\n");
else
printf("Array doesn't have two elements with given sumkey\n");
return 0;
}
Output:
Array has two elements with given key
Solution 2: Hashing Technique
In this technique is useful when the range of the number is known. For our program we have taken it as 1000.
Explanation:
Take an empty hash table say hashTable[].
Then we check if hashTable[ key – array[i] ] is set, then we shall print the pairs,
Else we update the value 1 to s[ array[i] ].
Hence the for loop will be:
for(i = 0; i < array_size; i++)
{
temp = key - array [i];
if (temp >= 0 && hashTable[temp] == 1)
printf("Elements are present");
s[ array[i] ] = 1;
}
Example:
Let us take the input [1, 2, 3, 4, 5] key is 9.
Pass 1:
i = 0;
temp = 9 - 1 = 8
if( 8 >= 0 && hashTable[8] == 1)
false
hashTable[ 1 ] = 1;
Pass 2:
i = 1;
temp = 9 - 2 = 7
if( 7 >= 0 && hashTable[7] == 1)
false
hashTable[ 2 ] = 1;
Pass 3:
i = 2;
temp = 9 - 3 = 6
if( 6 >= 0 && hashTable[6] == 1)
false
hashTable[ 3 ] = 1;
Pass 4:
i = 3;
temp = 9 - 4 = 5
if( 5 >= 0 && hashTable[5] == 1)
false
hashTable[ 4 ] = 1;
Pass 5:
i = 4;
temp = 9 - 5 = 4
if( 4 >= 0 && hashTable[4] == 1)
true
hashTable[ 5 ] = 1;
C program to implement the same:
# include <stdio.h>
#define MAX 100000
void checkPairs(int array[], int array_size, int key)
{
int i, temp;
int hashTable[MAX] = {0};
for(i = 0; i < array_size; i++)
{
temp = key - array [i];
if (temp >= 0 && hashTable[temp] == 1)
printf("Elements are present\n");
hashTable[ array[i] ] = 1;
}
}
int main()
{
int array[] = {1,2,3,4,5,6};
int key = 11;
int array_size = 6;
checkPairs(array, array_size, key);
return 0;
}