Skip to content
Related Articles
Maximize minimum of array generated by maximums of same indexed elements of two rows of a given Matrix
• Last Updated : 21 Apr, 2021

Given a matrix mat[][] of N rows and M columns, the task is to choose any two rows(i, j) (0 ≤ i, j ≤ N – 1) and construct a new array A[] of size M, where A[k] = max(mat[i][k], mat[j][k]) such that minimum of A[] is maximum possible.

Examples:

Input: mat[][] = {{5, 0, 3, 1, 2}, {1, 8, 9, 1, 3}, {1, 2, 3, 4, 5}, {9, 1, 0, 3, 7}, {2, 3, 0, 6, 3}, {6, 4, 1, 7, 0}}
Output: 3
Explanation:
Choose two rows i = 0 and j = 4. Then, A[] = {5, 3, 3, 6, 3} and min(A[]) is 3, which is maximum possible.

Input: mat[][] = {{2, 13, 41, 5}, {91, 11, 10, 13}, {12, 3, 28, 6}}
Output: 13
Explanation:
Choose two rows i = 0 and j = 1. Then, A[] = {91, 13, 41, 13} and min(A[]) is 13, which is maximum possible.

Approach: Follow the steps below to solve the problem:

• Initialize a variable global_max with INT_MAX, which stores the maximum of a minimum of array constructed from any two rows of mat[][].
• Iterate through every possible combination of rows i and j, and find the minimum of array constructed from them as row_min.
• In each iteration, update global_max to the maximum of row_min and itself.
• After the above steps, print the value of global_max as the result.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find the maximum of``// minimum of array constructed from``// any two rows of the given matrix``int` `getMaximum(``int` `N, ``int` `M,``               ``vector > mat)``{``    ``// Initialize global max as INT_MIN``    ``int` `global_max = INT_MIN;` `    ``// Iterate through the rows``    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// Iterate through remaining rows``        ``for` `(``int` `j = i + 1; j < N; j++) {` `            ``// Initialize row_min as INT_MAX``            ``int` `row_min = INT_MAX;` `            ``// Iterate through the column``            ``// values of two rows``            ``for` `(``int` `k = 0; k < M; k++) {` `                ``// Find max of two elements``                ``int` `m = max(mat[i][k],``                            ``mat[j][k]);` `                ``// Update the row_min``                ``row_min = min(row_min, m);``            ``}` `            ``// Update the global_max``            ``global_max = max(global_max,``                             ``row_min);``        ``}``    ``}` `    ``// Print the global max``    ``return` `global_max;``}` `// Driver Code``int` `main()``{` `    ``// Given matrix mat[][]``    ``vector > mat``        ``= { { 5, 0, 3, 1, 2 },``            ``{ 1, 8, 9, 1, 3 },``            ``{ 1, 2, 3, 4, 5 },``            ``{ 9, 1, 0, 3, 7 },``            ``{ 2, 3, 0, 6, 3 },``            ``{ 6, 4, 1, 7, 0 } };` `    ``// Given number of rows and columns``    ``int` `N = 6, M = 5;` `    ``// Function Call``    ``cout << getMaximum(N, M, mat);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.util.*;` `class` `GFG{` `// Function to find the maximum of``// minimum of array constructed from``// any two rows of the given matrix``static` `int` `getMaximum(``int` `N, ``int` `M, ``int``[][] mat)``{``    ` `    ``// Initialize global max as INT_MIN``    ``int` `global_max = Integer.MIN_VALUE;``    ` `    ``// Iterate through the rows``    ``for``(``int` `i = ``0``; i < N; i++)``    ``{``        ` `        ``// Iterate through remaining rows``        ``for``(``int` `j = i + ``1``; j < N; j++)``        ``{``            ` `            ``// Initialize row_min as INT_MAX``            ``int` `row_min = Integer.MAX_VALUE;``            ` `            ``// Iterate through the column``            ``// values of two rows``            ``for``(``int` `k = ``0``; k < M; k++)``            ``{``                ` `                ``// Find max of two elements``                ``int` `m = Math.max(mat[i][k],``                                 ``mat[j][k]);` `                ``// Update the row_min``                ``row_min = Math.min(row_min, m);``            ``}` `            ``// Update the global_max``            ``global_max = Math.max(global_max,``                                  ``row_min);``        ``}``    ``}` `    ``// Print the global max``    ``return` `global_max;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ` `    ``// Given matrix mat[][]``    ``int``[][] mat = { { ``5``, ``0``, ``3``, ``1``, ``2` `},``                    ``{ ``1``, ``8``, ``9``, ``1``, ``3` `},``                    ``{ ``1``, ``2``, ``3``, ``4``, ``5` `},``                    ``{ ``9``, ``1``, ``0``, ``3``, ``7` `},``                    ``{ ``2``, ``3``, ``0``, ``6``, ``3` `},``                    ``{ ``6``, ``4``, ``1``, ``7``, ``0` `} };` `    ``// Given number of rows and columns``    ``int` `N = ``6``, M = ``5``;` `    ``// Function Call``    ``System.out.println(getMaximum(N, M, mat));``}``}` `// This code is contributed by akhilsaini`

## Python3

 `# Python3 program for the above approach``import` `sys` `# Function to find the maximum of``# minimum of array constructed from``# any two rows of the given matrix``def` `getMaximum(N, M, mat):``    ` `    ``# Initialize global max as INT_MIN``    ``global_max ``=` `-``1` `*` `(sys.maxsize)` `    ``# Iterate through the rows``    ``for` `i ``in` `range``(``0``, N):``        ` `        ``# Iterate through remaining rows``        ``for` `j ``in` `range``(i ``+` `1``, N):` `            ``# Initialize row_min as INT_MAX``            ``row_min ``=` `sys.maxsize` `            ``# Iterate through the column``            ``# values of two rows``            ``for` `k ``in` `range``(``0``, M):` `                ``# Find max of two elements``                ``m ``=` `max``(mat[i][k], mat[j][k])` `                ``# Update the row_min``                ``row_min ``=` `min``(row_min, m)` `            ``# Update the global_max``            ``global_max ``=` `max``(global_max,``                             ``row_min)` `    ``# Print the global max``    ``return` `global_max` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:` `    ``# Given matrix mat[][]``    ``mat ``=` `[ [ ``5``, ``0``, ``3``, ``1``, ``2` `],``            ``[ ``1``, ``8``, ``9``, ``1``, ``3` `],``            ``[ ``1``, ``2``, ``3``, ``4``, ``5` `],``            ``[ ``9``, ``1``, ``0``, ``3``, ``7` `],``            ``[ ``2``, ``3``, ``0``, ``6``, ``3` `],``            ``[ ``6``, ``4``, ``1``, ``7``, ``0` `] ]` `    ``# Given number of rows and columns``    ``N ``=` `6``    ``M ``=` `5` `    ``# Function Call``    ``print``(getMaximum(N, M, mat))` `# This code is contributed by akhilsaini`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{` `// Function to find the maximum of``// minimum of array constructed from``// any two rows of the given matrix``static` `int` `getMaximum(``int` `N, ``int` `M, ``int``[,] mat)``{``    ` `    ``// Initialize global max as INT_MIN``    ``int` `global_max = ``int``.MinValue;``    ` `    ``// Iterate through the rows``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ` `        ``// Iterate through remaining rows``        ``for``(``int` `j = i + 1; j < N; j++)``        ``{``            ` `            ``// Initialize row_min as INT_MAX``            ``int` `row_min = ``int``.MaxValue;` `            ``// Iterate through the column``            ``// values of two rows``            ``for``(``int` `k = 0; k < M; k++)``            ``{``                ` `                ``// Find max of two elements``                ``int` `m = Math.Max(mat[i, k],``                                 ``mat[j, k]);``                                 ` `                ``// Update the row_min``                ``row_min = Math.Min(row_min, m);``            ``}` `            ``// Update the global_max``            ``global_max = Math.Max(global_max,``                                  ``row_min);``        ``}``    ``}` `    ``// Print the global max``    ``return` `global_max;``}` `// Driver Code``public` `static` `void` `Main()``{``    ` `    ``// Given matrix mat[][]``    ``int``[,] mat = { { 5, 0, 3, 1, 2 },``                   ``{ 1, 8, 9, 1, 3 },``                   ``{ 1, 2, 3, 4, 5 },``                   ``{ 9, 1, 0, 3, 7 },``                   ``{ 2, 3, 0, 6, 3 },``                   ``{ 6, 4, 1, 7, 0 } };` `    ``// Given number of rows and columns``    ``int` `N = 6, M = 5;` `    ``// Function Call``    ``Console.WriteLine(getMaximum(N, M, mat));``}``}` `// This code is contributed by akhilsaini`

## Javascript

 ``
Output:
`3`

Time Complexity: O(M*N2)
Auxiliary Space: O(1)

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up