Найдите абсолютную разницу между произведением минимума и максимума по строкам и столбцам в заданной матрице
Учитывая квадратную матрицу M[][] размера N x N , задача состоит в том, чтобы найти максимумы и минимумы каждой из строк и столбцов , умножить соответствующие максимумы и минимумы каждой строки на таковые в каждом столбце. Наконец, вернуть абсолютная разница обоих из них.
Примеры :
Input: M[][] = [ [ 3, 2, 5 ], [ 7, 5, 4 ], [ 7, 2, 9 ] ]
Output: 11
Explanation:
Input: M = [ [1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
Output: 40
Наивный подход: задача может быть решена путем моделирования заданных операций. Выполните следующие шаги, чтобы решить проблему:
- Возьмите 2 массива max1[] и min1[] для хранения максимума и минимума каждой строки или каждого столбца.
- Сначала сохраните максимум каждой строки в max1[ ] и минимум каждой строки в min1[ ] .
- Множественное разрешение матрицы и возврата, сохраните его в R .
- Транспонируем матрицу M[ ] .
- Затем сохраните максимум каждого столбца в max1[ ] и минимум каждого столбца в min1[ ] .
- Умножьте обе матрицы и верните res, сохраните его в C .
- Выведите абсолютную разницу R и C .
Ниже приведена реализация вышеуказанного подхода:
Сложность времени : НА)
Вспомогательное пространство : НА)
Подход, оптимизированный по пространству: этот подход аналогичен подходу 1, но в нем вспомогательное пространство будет оптимизировано без использования массивов max1 и min1. При этом направьте несколько, добавьте элемент и верните его.
Ниже приведена реализация вышеуказанного подхода:
C++
// C++ program for the above approach#include<bits/stdc++.h>using namespace std;// Function to find the transpose matrix M[]vector<vector<int>> transpose(vector<vector<int>>M, int N){for(int i = 0; i < N; i++){ for(int j = 0; j < i + 1; j++) { int temp = M[i][j]; M[i][j] = M[j][i]; M[j][i] = temp; }}return M;}// Function to convert matrix M[][] to size 1 * 1int matOne(vector<vector<int>>M, int N){// Max1 and min1 to store max and min// of each row pr column vector<int>arr; int res = 0; for (int r =0;r< N;r++){ arr.clear(); for(int j =0;j<N;j++){ arr.push_back(M[r][j]); } sort(arr.begin(),arr.end()); res += arr[arr.size()-1] * arr[0]; } // Return res return res;}// Driver codeint main(){// Original matrixvector<vector<int>>M = {{3, 2, 5},{7, 5, 4},{7, 2, 9}};// N size of matrixint N = M.size();// Call matOne function for rowsint R = matOne(M, N);// Transpose the matrixvector<vector<int>>T = transpose(M, N);// Call matOne function for columnint C = matOne(T, N);// Print the absolute differencecout << abs(R - C) << endl;}// This code is contributed by akshitsaxenaa09. |
Java
import java.util.Arrays;// Java program for the above approachclass GFG{ // Function to find the transpose matrix M[] static int[][] transpose(int[][] M, int N) { int transpose[][] = new int[N][N]; // Code to transpose a matrix for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { transpose[i][j] = M[j][i]; } } return transpose; } // Function to convert matrix M[][] to size 1 * 1 static int matOne(int[][] M, int N) { // Loop to calculate res. int res = 0; for (int[] r : M) res += Arrays.stream(r).max().getAsInt() * Arrays.stream(r).min().getAsInt(); // Return res return res; } // Driver code public static void main(String[] args) { // Original matrix int[][] M = { { 3, 2, 5 }, { 7, 5, 4 }, { 7, 2, 9 } }; // N size of matrix int N = M.length; // Call matOne function for rows int R = matOne(M, N); // Transpose the matrix int[][] T = transpose(M, N); // Call matOne function for column int C = matOne(T, N); // Print the absolute difference System.out.println((Math.abs(R - C))); }}// This code is contributed by 29AjayKumar |
Python3
# Python program for the above approach# Function to find the transpose matrix M[]def transpose(M, N): for i in range(N): for j in range(i + 1): M[i][j], M[j][i] = M[j][i], M[i][j] return M# Function to convert matrix M[][] to size 1 * 1def matOne(M, N): # Loop to calculate res. res = 0 for r in M: res += max(r)*min(r) # Return res return res# Driver codeif __name__ == "__main__": # Original matrix M = [[3, 2, 5], [7, 5, 4], [7, 2, 9]] # N size of matrix N = len(M) # Call matOne function for rows R = matOne(M, N) # Transpose the matrix T = transpose(M, N) # Call matOne function for column C = matOne(T, N) # Print the absolute difference print(str(abs(R-C))) |
C#
// C# program for the above approachusing System;using System.Linq;public class GFG{ // Function to find the transpose matrix []M static int[,] transpose(int[,] M, int N) { int [,]transpose = new int[N,N]; // Code to transpose a matrix for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { transpose[i,j] = M[j,i]; } } return transpose; } // Function to convert matrix [,]M to size 1 * 1 static int matOne(int[,] M, int N) { // Loop to calculate res. int res = 0; for (int r =0;r< N;r++){ int[] t = new int[N]; for(int j =0;j<N;j++){ t[j] = M[r,j]; } res += t.Max() * t.Min(); } // Return res return res; } // Driver code public static void Main(String[] args) { // Original matrix int[,] M = { { 3, 2, 5 }, { 7, 5, 4 }, { 7, 2, 9 } }; // N size of matrix int N = M.GetLength(0); // Call matOne function for rows int R = matOne(M, N); // Transpose the matrix int[,] T = transpose(M, N); // Call matOne function for column int C = matOne(T, N); // Print the absolute difference Console.WriteLine((Math.Abs(R - C))); }}// This code is contributed by umadevi9616 |
Javascript
<script> // JavaScript code for the above approach // Function to find the transpose matrix M[] function transpose(M, N) { // This function stores transpose // of A in B let B = Array(M).fill(0); for (let i = 0; i < N; i++) { B[i] = new Array(N); } var i, j; for (i = 0; i < N; i++) for (j = 0; j < N; j++) B[i][j] = M[j][i]; return B } // Function to convert matrix M[][] to size 1 * 1 function matOne(M, N) { // Max1 and min1 to store max and min // of each row pr column max1 = [] min1 = [] // Loop to store element in max1 and min1 for (let i = 0; i < M.length; i++) { r = M[i] max1.push(Math.max(...r)) min1.push(Math.min(...r)) } // Initialise res to 0 res = 0 // Multiply and add both array for (let i = 0; i < N; i++) res += (max1[i] * min1[i]) // Return res return res } // Driver code // Original matrix let M = [[3, 2, 5], [7, 5, 4], [7, 2, 9]] // N size of matrix let N = M.length // Call matOne function for rows let R = matOne(M, N) // Transpose the matrix T = transpose(M, N) // Call matOne function for column C = matOne(T, N) // Print the absolute difference document.write(Math.abs(R - C)) // This code is contributed by Potta Lokesh </script> |
Сложность времени : НА)
Вспомогательное пространство : О(1)
