Find Pair Given Difference
Given an array Arr[] containing n elements and a number k, check if there exists a pair of elements in the array whose difference is k. print 1 if exits else -1
Example:
Input: arr[] = {5, 20, 3, 2, 50, 80}, n = 78
Output: 1
as the difference of 80 and 2 is 78
Input: arr[] = {90, 70, 20, 80, 50}, n = 45
Output: 1
as no such pair exits with difference 45
method 1: using two loops:
simple procedure is to use two loops and check if the difference exits or not
int pairdiff(int arr[],int n,int k)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]-a[j]==k)
return 1;
}
}
return -1;
}
Time complexity : O(n^2)
space complexity:O(1)
method 2: using sorting and two pointer approch:
step 1: sort the array
step 2: take two index variables i and j, initialize them as 0 and 1 respectively. Now run a linear loop. If arr[j] – arr[i] is equal to k we will return 1,If arr[j] – arr[i] is smaller than n, we need to look for greater arr[j], so increment j. If arr[j] – arr[i] is greater than n, we need to look for greater arr[i], so increment i.
int pairdiff(int arr[],int n,int k)
{
int i = 0;
int j = 0;
// Search for a pair
while (i < n && j < n)
{
if (arr[j] - arr[i] == k)
{
return 1;
}
else if (arr[j]-arr[i] < k)
j++;
else
i++;
}
return -1;
}
Time complexity : O(nlogn)
space complexity:O(1)
method 2: using unordered_map
2)now traverse through the array and check if the element with value equal to arr[i]-k is present or not in map
3) if present return 1
4)else it will return -1
int pairdiff(int arr[],int n,int k)
{
//declare a unordered_map
unordered_map<int,int>m;
//store all array elements in unordered_map
for(int i=0;i<n;i++)
m[arr[i]];
//now traverse through the array
for(int i=0;i<n;i++)
{
//check if the element with value equal
//to arr[i]-k is present or not in map
if(m.find(arr[i]-k)!=m.end())
return 1;
}
return -1;
}
Time complexity : O(n)
space complexity:O(n) , as we are using extra space for using map
No comments