Common elements in all rows of a given matrix
Last Updated :
07 Apr, 2025
Given an m x n matrix, find all common elements present in all rows in O(mn) time and one traversal of matrix.
Example:
Input:
mat[4][5] = {{1, 2, 1, 4, 8},
{3, 7, 8, 5, 1},
{8, 7, 7, 3, 1},
{8, 1, 2, 7, 9},
};
Output:
1 8 or 8 1
8 and 1 are present in all rows.
A simple solution is to consider every element and check if it is present in all rows. If present, then print it.
A better solution is to sort all rows in the matrix and use similar approach as discussed here. Sorting will take O(mnlogn) time and finding common elements will take O(mn) time. So overall time complexity of this solution is O(mnlogn)
Can we do better than O(mnlogn)?
The idea is to use maps. We initially insert all elements of the first row in an map. For every other element in remaining rows, we check if it is present in the map. If it is present in the map and is not duplicated in current row, we increment count of the element in map by 1, else we ignore the element. If the currently traversed row is the last row, we print the element if it has appeared m-1 times before.
Below is the implementation of the idea:
C++
// A Program to prints common element in all
// rows of matrix
#include <bits/stdc++.h>
using namespace std;
// Specify number of rows and columns
#define M 4
#define N 5
// prints common element in all rows of matrix
void printCommonElements(int mat[M][N])
{
unordered_map<int, int> mp;
// initialize 1st row elements with value 1
for (int j = 0; j < N; j++)
mp[(mat[0][j])] = 1;
// traverse the matrix
for (int i = 1; i < M; i++)
{
for (int j = 0; j < N; j++)
{
// If element is present in the map and
// is not duplicated in current row.
if (mp[(mat[i][j])] == i)
{
// we increment count of the element
// in map by 1
mp[(mat[i][j])] = i + 1;
// If this is last row
if (i==M-1 && mp[(mat[i][j])]==M)
cout << mat[i][j] << " ";
}
}
}
}
// driver program to test above function
int main()
{
int mat[M][N] =
{
{1, 2, 1, 4, 8},
{3, 7, 8, 5, 1},
{8, 7, 7, 3, 1},
{8, 1, 2, 7, 9},
};
printCommonElements(mat);
return 0;
}
Java
// Java Program to prints common element in all
// rows of matrix
import java.util.*;
class GFG
{
// Specify number of rows and columns
static int M = 4;
static int N =5;
// prints common element in all rows of matrix
static void printCommonElements(int mat[][])
{
Map<Integer,Integer> mp = new HashMap<>();
// initialize 1st row elements with value 1
for (int j = 0; j < N; j++)
mp.put(mat[0][j],1);
// traverse the matrix
for (int i = 1; i < M; i++)
{
for (int j = 0; j < N; j++)
{
// If element is present in the map and
// is not duplicated in current row.
if (mp.get(mat[i][j]) != null && mp.get(mat[i][j]) == i)
{
// we increment count of the element
// in map by 1
mp.put(mat[i][j], i + 1);
// If this is last row
if (i == M - 1)
System.out.print(mat[i][j] + " ");
}
}
}
}
// Driver code
public static void main(String[] args)
{
int mat[][] =
{
{1, 2, 1, 4, 8},
{3, 7, 8, 5, 1},
{8, 7, 7, 3, 1},
{8, 1, 2, 7, 9},
};
printCommonElements(mat);
}
}
// This code contributed by Rajput-Ji
Python3
# A Program to prints common element
# in all rows of matrix
# Specify number of rows and columns
M = 4
N = 5
# prints common element in all
# rows of matrix
def printCommonElements(mat):
mp = dict()
# initialize 1st row elements
# with value 1
for j in range(N):
mp[(mat[0][j])] = 1
# traverse the matrix
for i in range(1, M):
for j in range(N):
# If element is present in the
# map and is not duplicated in
# current row.
if (mat[i][j] in mp.keys() and
mp[(mat[i][j])] == i):
# we increment count of the
# element in map by 1
mp[(mat[i][j])] = i + 1
# If this is last row
if i == M - 1:
print(mat[i][j], end = " ")
# Driver Code
mat = [[1, 2, 1, 4, 8],
[3, 7, 8, 5, 1],
[8, 7, 7, 3, 1],
[8, 1, 2, 7, 9]]
printCommonElements(mat)
# This code is contributed
# by mohit kumar 29
C#
// C# Program to print common element in all
// rows of matrix to another.
using System;
using System.Collections.Generic;
class GFG
{
// Specify number of rows and columns
static int M = 4;
static int N = 5;
// prints common element in all rows of matrix
static void printCommonElements(int [,]mat)
{
Dictionary<int, int> mp = new Dictionary<int, int>();
// initialize 1st row elements with value 1
for (int j = 0; j < N; j++)
{
if(!mp.ContainsKey(mat[0, j]))
mp.Add(mat[0, j], 1);
}
// traverse the matrix
for (int i = 1; i < M; i++)
{
for (int j = 0; j < N; j++)
{
// If element is present in the map and
// is not duplicated in current row.
if (mp.ContainsKey(mat[i, j])&&
(mp[(mat[i, j])] != 0 &&
mp[(mat[i, j])] == i))
{
// we increment count of the element
// in map by 1
if(mp.ContainsKey(mat[i, j]))
{
var v = mp[(mat[i, j])];
mp.Remove(mat[i, j]);
mp.Add(mat[i, j], i + 1);
}
else
mp.Add(mat[i, j], i + 1);
// If this is last row
if (i == M - 1)
Console.Write(mat[i, j] + " ");
}
}
}
}
// Driver code
public static void Main(String[] args)
{
int [,]mat = {{1, 2, 1, 4, 8},
{3, 7, 8, 5, 1},
{8, 7, 7, 3, 1},
{8, 1, 2, 7, 9}};
printCommonElements(mat);
}
}
// This code is contributed by 29AjayKumar
JavaScript
<script>
// Javascript Program to prints common element in all
// rows of matrix
// Specify number of rows and columns
let M = 4;
let N =5;
// prints common element in all rows of matrix
function printCommonElements(mat)
{
let mp = new Map();
// initialize 1st row elements with value 1
for (let j = 0; j < N; j++)
mp.set(mat[0][j],1);
// traverse the matrix
for (let i = 1; i < M; i++)
{
for (let j = 0; j < N; j++)
{
// If element is present in the map and
// is not duplicated in current row.
if (mp.get(mat[i][j]) != null && mp.get(mat[i][j]) == i)
{
// we increment count of the element
// in map by 1
mp.set(mat[i][j], i + 1);
// If this is last row
if (i == M - 1)
document.write(mat[i][j] + " ");
}
}
}
}
// Driver code
let mat = [[1, 2, 1, 4, 8],
[3, 7, 8, 5, 1],
[8, 7, 7, 3, 1],
[8, 1, 2, 7, 9]]
printCommonElements(mat)
// This code is contributed by unknown2108
</script>
The time complexity of this solution is O(m * n) and we are doing only one traversal of the matrix.
Auxiliary Space: O(N)
Similar Reads
Find distinct elements common to all rows of a matrix Given a n x n matrix. The problem is to find all the distinct elements common to all rows of the matrix. The elements can be printed in any order. Examples: Input : mat[][] = { {2, 1, 4, 3}, {1, 2, 3, 2}, {3, 6, 2, 3}, {5, 2, 5, 3} } Output : 2 3 Input : mat[][] = { {12, 1, 14, 3, 16}, {14, 2, 1, 3,
15+ min read
Find a common element in all rows of a given row-wise sorted matrix Given a matrix where every row is sorted in increasing order. Write a function that finds and returns a common element in all rows. If there is no common element, then returns -1. Example: Input: mat[4][5] = { {1, 2, 3, 4, 5}, {2, 4, 5, 8, 10}, {3, 5, 7, 9, 11}, {1, 3, 5, 7, 9}, };Output: 5A O(m*n*n
15+ min read
Count of unique rows in a given Matrix Given a 2D matrix arr of size N*M containing lowercase English letters, the task is to find the number of unique rows in the given matrix. Examples: Input: arr[][]= { {'a', 'b', 'c', 'd'}, {'a', 'e', 'f', 'r'}, {'a', 'b', 'c', 'd'}, {'z', 'c', 'e', 'f'} }Output: 2Explanation: The 2nd and the 4th row
10 min read
Count rows in a matrix that consist of same element Given a matrix mat[][], the task is to count the number of rows in the matrix that consists of the same elements. Examples: Input: mat[][] = {{1, 1, 1}, {1, 2, 3}, {5, 5, 5}} Output: 2 All the elements of the first row and all the elements of the third row are the same. Input: mat[][] = {{1, 2}, {4,
9 min read
Row-wise common elements in two diagonals of a square matrix Given a square matrix, find out count of numbers that are same in same row and same in both primary and secondary diagonals. Examples : Input : 1 2 1 4 5 2 0 5 1 Output : 2 Primary diagonal is 1 5 1 Secondary diagonal is 1 5 0 Two elements (1 and 5) match in two diagonals and same. Input : 1 0 0 0 1
4 min read
Find sum of all elements in a matrix except the elements in row and/or column of given cell? Given a 2D matrix and a set of cell indexes e.g., an array of (i, j) where i indicates row and j column. For every given cell index (i, j), find sums of all matrix elements except the elements present in i'th row and/or j'th column. Example: mat[][] = { {1, 1, 2} {3, 4, 6} {5, 3, 2} } Array of Cell
12 min read
Find row and column pair in given Matrix with equal row and column sum Given a matrix Mat of size N x M, the task is to find all the pairs of rows and columns where the sum of elements in the row is equal to the sum of elements in the columns. Examples: Input: M = {{1, 2, 2}, {1, 5, 6}, {3, 8, 9}}Output: {{1, 1}}Explanation: The sum of elements of rows and columns of m
8 min read
Enlarge a Matrix such that each element occurs in R rows and C columns Given a matrix arr[][] of size N x M, and two numbers R and C, the task is to enlarge this matrix such that each element of the original matrix occurs in R rows and C columns in the enlarged matrix. Examples: Input: arr[][] = {{1, 2, 3}, {4, 5, 6}} R = 3, C = 2 Output: 1 1 2 2 3 3 4 4 5 5 6 6 1 1 2
9 min read
Count majority element in a matrix Given a NxM matrix of integers containing duplicate elements. The task is to find the count of all majority occurring elements in the given matrix, where majority element are those whose frequency is greater than or equal to (N*M)/2. Examples: Input : mat[] = {{1, 1, 2}, {2, 3, 3}, {4, 3, 3}} Output
6 min read
Find unique elements in a matrix Given a matrix mat[][] having n rows and m columns. The task is to find unique elements in the matrix i.e., those elements which are not repeated in the matrix or those elements whose frequency is 1. Examples: Input: mat[][] = [[2, 1, 4, 3], [1, 2, 3, 2], [3, 6, 2, 3], [5, 2, 5, 3]]Output: 4 6Input:
5 min read