Given a N*N matrix of positive integers. The task is to find the maximum difference between any pair of elements in any column of the matrix.
Examples:
Input : mat[N][N] = { { 1, 2, 3, 4, 5 }, { 5, 3, 5, 4, 0 }, { 5, 6, 7, 8, 9 }, { 0, 6, 3, 4, 12 }, { 9, 7, 12, 4, 3 }, }; Output : Max difference : 12 5th column has the pair with max difference (0, 12) Input : mat[N][N] = { { 1, 2, 3 }, { 5, 3, 5 }, { 9, 6, 7 } }; Output : Max difference : 8
The idea is to observe that the pair with a maximum difference in any column is the difference between the maximum and minimum element of that column. Now traverse the matrix column-wise. Find the difference between the max and min elements of every column and return the maximum difference.
Below is the implementation of the above approach:
C++
// C++ program to find column with // max difference of any pair of elements #include <bits/stdc++.h> using namespace std; #define N 5 // No of rows and column // Function to find the column with max difference int colMaxDiff( int mat[N][N]) { int max_diff = INT_MIN; // Traverse matrix column wise for ( int i = 0; i < N; i++) { // Insert elements of column to vector int max_val = mat[0][i], min_val = mat[0][i]; for ( int j = 1; j < N; j++) { max_val = max(max_val, mat[j][i]); min_val = min(min_val, mat[j][i]); } // calculating difference between maximum and // minimum max_diff = max(max_diff, max_val - min_val); } return max_diff; } // driver code int main() { int mat[N][N] = { { 1, 2, 3, 4, 5 }, { 5, 3, 5, 4, 0 }, { 5, 6, 7, 8, 9 }, { 0, 6, 3, 4, 12 }, { 9, 7, 12, 4, 3 }, }; cout << "Max difference : " << colMaxDiff(mat) << endl; return 0; } |
Java
// Java program to find column with // max difference of any pair of elements public class GOC1 { static int N = 5 ; // No of rows and column // Function to find the column with max difference static int colMaxDiff( int mat[][]) { int max_diff = Integer.MIN_VALUE; // Traverse matrix column wise for ( int i = 0 ; i < N; i++) { // Insert elements of column to vector int max_val = mat[ 0 ][i], min_val = mat[ 0 ][i]; for ( int j = 1 ; j < N; j++) { max_val = Math.max(max_val, mat[j][i]); min_val = Math.min(min_val, mat[j][i]); } // calculating difference between maximum and // minimum max_diff = Math.max(max_diff, max_val - min_val); } return max_diff; } // Driver Code public static void main(String args[]) { int mat[][] = { { 1 , 2 , 3 , 4 , 5 }, { 5 , 3 , 5 , 4 , 0 }, { 5 , 6 , 7 , 8 , 9 }, { 0 , 6 , 3 , 4 , 12 }, { 9 , 7 , 12 , 4 , 3 }, }; System.out.println( "Max difference : " +colMaxDiff(mat)); } } |
Python3
# Python3 program to find column with # max difference of any pair of elements N = 5 # No of rows and column # Function to find the column # with max difference def colMaxDiff(mat): max_diff = 0 # Traverse matrix column wise for i in range (N): # Insert elements of column # to vector max_val = mat[ 0 ][i] min_val = mat[ 0 ][i] for j in range ( 1 , N) : max_val = max (max_val, mat[j][i]) min_val = min (min_val, mat[j][i]) # calculating difference between # maximum and minimum max_diff = max (max_diff, max_val - min_val) return max_diff # Driver Code if __name__ = = "__main__" : mat = [[ 1 , 2 , 3 , 4 , 5 ], [ 5 , 3 , 5 , 4 , 0 ], [ 5 , 6 , 7 , 8 , 9 ], [ 0 , 6 , 3 , 4 , 12 ], [ 9 , 7 , 12 , 4 , 3 ]] print ( "Max difference :" , colMaxDiff(mat)) # This code is contributed by ita_c |
C#
// C# program to find column // with max difference of // any pair of elements using System; class GFG { static int N = 5; // No of rows and column // Function to find the column // with max difference static int colMaxDiff( int [,]mat) { int max_diff = int .MinValue; // Traverse matrix column wise for ( int i = 0; i < N; i++) { // Insert elements of column // to vector int max_val = mat[0, i], min_val = mat[0, i]; for ( int j = 1; j < N; j++) { max_val = Math.Max(max_val, mat[j, i]); min_val = Math.Min(min_val, mat[j, i]); } // calculating difference between // maximum and minimum max_diff = Math.Max(max_diff, max_val - min_val); } return max_diff; } // Driver Code public static void Main() { int [,]mat = { { 1, 2, 3, 4, 5 }, { 5, 3, 5, 4, 0 }, { 5, 6, 7, 8, 9 }, { 0, 6, 3, 4, 12 }, { 9, 7, 12, 4, 3 }}; Console.WriteLine( "Max difference : " + colMaxDiff(mat)); } } // This code is contributed // by Subhadeep |
PHP
<?php // PHP program to find column with // max difference of any pair of elements // Function to find the column with max difference function colMaxDiff( $mat ) { $N = 5; $max_diff = PHP_INT_MIN; // Traverse matrix column wise for ( $i = 0; $i < $N ; $i ++) { // Insert elements of column to vector $max_val = $mat [0][ $i ]; $min_val = $mat [0][ $i ]; for ( $j = 1; $j < $N ; $j ++) { $max_val = max( $max_val , $mat [ $j ][ $i ]); $min_val = min( $min_val , $mat [ $j ][ $i ]); } // calculating difference between maximum and // minimum $max_diff = max( $max_diff , $max_val - $min_val ); } return $max_diff ; } // driver code $mat = array ( array ( 1, 2, 3, 4, 5 ), array (5, 3, 5, 4, 0 ), array (5, 6, 7, 8, 9 ), array (0, 6, 3, 4, 12 ), array (9, 7, 12, 4, 3 )); echo "Max difference : " . colMaxDiff( $mat ) . "\n" ; // This code is contributed // by Akanksha Rai |
Javascript
<script> // Javascript program to find column with // max difference of any pair of elements let N = 5; // No of rows and column // Function to find the column with max difference function colMaxDiff(mat) { let max_diff = Number.MIN_VALUE; // Traverse matrix column wise for (let i = 0; i < N; i++) { // Insert elements of column to vector let max_val = mat[0][i], min_val = mat[0][i]; for (let j = 1; j < N; j++) { max_val = Math.max(max_val, mat[j][i]); min_val = Math.min(min_val, mat[j][i]); } // calculating difference between maximum and // minimum max_diff = Math.max(max_diff, max_val - min_val); } return max_diff; } // Driver Code let mat = [[ 1, 2, 3, 4, 5 ], [5, 3, 5, 4, 0 ], [ 5, 6, 7, 8, 9 ], [ 0, 6, 3, 4, 12 ], [ 9, 7, 12, 4, 3 ]]; document.write( "Max difference :" + colMaxDiff(mat)) // This code is contributed by rag2127 </script> |
Max difference : 12
Time Complexity: O(n^2)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!