Check if a pair with given absolute difference exists in a Matrix

Given an N×M matrix and a difference K. The task is to check if a pair with the given absolute difference exists in the matrix or not.
Examples

Input: mat[N][M] = {{1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {9, 10, 11, 12},
                    {13, 14, 15, 100}};
       K = 85
Output: YES

Input: mat[N][M] = {{1, 2, 3, 4},
                   {5, 6, 7, 8}};
       K = 150
Output: NO

Approach:  

  • Initialize a hash-map to keep track of already visited elements of the matrix.
  • Iterate over the matrix and check if the difference of the current element and k is already present in the hash-map. If yes then the current element and the difference of the element with k is the desired pair.
  • Otherwise, Add the current element into the map.

Below is the implementation of the above approach: 
 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP code to check for pair with given
// difference exists in the matrix or not
 
#include <bits/stdc++.h>
using namespace std;
 
#define N 4
#define M 4
 
// Function to check if a pair with given
// difference exists in the matrix
bool isPairWithDiff(int mat[N][M], int k)
{
    unordered_set <int> ump ;
    
    // Loop to iterate over the matrix
    for( int i = 0 ; i < N  ; i++ )
    {
        for( int j =0 ; j < M ; j++ )
        {
            if( mat[i][j] > k )
            {
                int m = mat[i][j] - k ;
                 
                if( ump.find(m) != ump.end() )
                {
                    return true ;
                }
            }
            else
            {
                int m = k - mat[i][j] ;
                 
                if( ump.find(m) != ump.end() )
                {
                    return true ;
                }
            }
            ump.insert(mat[i][j]);
        }
    }
  return false;
}
 
// Driver Code
int main()
{
    // Input matrix
    int mat[N][M] ={ { 5, 2, 3, 4 },
                    { 5, 6, 7, 8 },
                    { 9, 10, 11, 12 },
                    { 13, 14, 15, 100 } };
 
    // Given difference
    int k = 85;
 
    if (isPairWithDiff(mat, k))
        cout << "YES" << endl;    
    else
        cout << "NO" << endl;
 
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to check for pair with given
// difference exists in the matrix or not
import java.util.*;
 
class GFG
{
 
static final int N = 4;
static final int M = 4;
 
// Function to check if a pair with given
// difference exists in the matrix
static boolean isPairWithDiff(int mat[][], int k)
{
    // Store elements in a hash
    HashSet<Integer> s = new HashSet<Integer>();
   
    // Loop to iterate over the
    // elements of the matrix
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++) {
            if( mat[i][j] > k )
            {
                int m = mat[i][j] - k ;
                 
                if(s.contains(m))
                {
                    return true ;
                }
            }
            else
            {
                int m = k - mat[i][j] ;
                 
                if(s.contains(m))
                {
                    return true ;
                }
            }
            s.add(mat[i][j]);    
        }
    
             
    return false;
}
 
// Driver Code
public static void main(String[] args)
{
    // Input matrix
    int mat[][] = { { 5, 2, 3, 4 },
                    { 5, 6, 7, 8 },
                    { 9, 10, 11, 12 },
                    { 13, 14, 15, 100 } };
 
    // Given difference
    int k = 85;
 
    System.out.println(
      isPairWithDiff(mat, k) == true ?
      "YES" : "NO");
}
}
 
// This code contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to check for pairs
# with given difference exits in the
# matrix or not
N = 4
M = 4
 
# Function to check if a
# pair with given
# difference exist in the matrix
def isPairWithDiff(mat, k):
     
    # Store elements in a hash
    s = set()
     
    # Store elements in dict
    for i in range(N):
        for j in range(M):
            if mat[i][j] > k:
                m = mat[i][j] - k
                if m in s:
                    return True
            else:
                m = k - mat[i][j]
                if m in s:
                    return True
            s.add(mat[i][j])
     
    return False       
     
# Driver Code
n, m = 4, 4
mat = [[5, 2, 3, 4],
       [5, 6, 7, 8],
       [9, 10, 11, 12],
       [13, 14, 15, 100]]
     
# given difference
k = 85
 
if isPairWithDiff(mat, k):
    print("Yes")
else:
    print("No")
 
# This code is contributed by
# Mohit kumar 29 (IIIT gwalior)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to check for pair with given
// difference exists in the matrix or not
using System;
using System.Collections.Generic;
     
class GFG
{
 
static int N = 4;
static int M = 4;
 
// Function to check if a pair with given
// difference exists in the matrix
static Boolean isPairWithDiff(
             int [,]mat, int k)
{
    // Store elements in a hash
    HashSet<int> s = new HashSet<int>();
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            if( mat[i, j] > k )
            {
                int m = mat[i, j] - k ;
                 
                if(s.Contains(m))
                {
                    return true ;
                }
            }
            else
            {
                int m = k - mat[i, j];
                 
                if(s.Contains(m))
                {
                    return true ;
                }
            }
            s.Add(mat[i, j]);  
        }
    }
             
    return false;
}
 
// Driver Code
public static void Main(String[] args)
{
    // Input matrix
    int [,]mat = { { 5, 2, 3, 4 },
                    { 5, 6, 7, 8 },
                    { 9, 10, 11, 12 },
                    { 13, 14, 15, 100 } };
 
    // Given difference
    int k = 85;
 
    Console.WriteLine(
      isPairWithDiff(mat, k) == true ?
      "YES" : "NO");
}
}
 
/* This code contributed by PrinciRaj1992 */

chevron_right


Output

YES

Time Complexity: O(N*M)
Auxiliary Space: O(N*M)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.