Problem Statement:
You are given an m*n matrix, you need to print all the common elements present in all the rows.
Example:
mat[4][5] = {{1, 2, 1, 8}, {3, 7, 8, 5}, {8, 7, 7, 3}, {8, 1, 2, 7}, }; Output: 8
Solution
In this solution we will use MAPS.
Initially insert all the elements of the first row in a map.
Then for each element for the remaining rows, check if the element is present in the map.
If it is present and is not a duplicate in current row, increment the count.
else we ignore the element.
Then once we traverse the last low, print the element if it has appeared m-1 times.
Solution in C++:
#include <vector> #include <algorithm> //visit www.ProDeveloperTutorial.com for 450+ solved questions #include <iostream> #include <unordered_map> using namespace std; #define r 4 #define c 5 void print_common_elements(int arr[4][5]) { unordered_map<int, int> map; // insert the element of the first row and initialize with value 1 for (int j = 0; j < c; j++) map[arr[0][j]] = 1; for (int i = 1; i < r; i++) { for (int j = 0; j < c; j++) { // If element is present in the map and is not duplicated in current row. if (map[arr[i][j]] == i) { // increment count of the element in map by 1 map[arr[i][j]] = i + 1; // If this is last row if (i==r-1) cout << arr[i][j] << " "; } } } } int main() { int arr[4][5] = { { 2, 4, 3, 8, 7 }, { 4, 7, 1, 3, 6 }, { 3, 5, 2, 1, 3 }, { 4, 5, 0, 2, 3 }, }; cout << "The common elements in all the rows are "; print_common_elements(arr); return 0; }
Output:
The common elements in all the rows are 3