Related Articles
Maximize minimum of array generated by maximums of same indexed elements of two rows of a given Matrix
• Last Updated : 03 Dec, 2020

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`

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.

My Personal Notes arrow_drop_up
Recommended Articles
Page :