Welcome to Subscribe On Youtube
1975. Maximum Matrix Sum
Description
You are given an n x n
integer matrix
. You can do the following operation any number of times:
- Choose any two adjacent elements of
matrix
and multiply each of them by-1
.
Two elements are considered adjacent if and only if they share a border.
Your goal is to maximize the summation of the matrix's elements. Return the maximum sum of the matrix's elements using the operation mentioned above.
Example 1:
Input: matrix = [[1,-1],[-1,1]] Output: 4 Explanation: We can follow the following steps to reach sum equals 4: - Multiply the 2 elements in the first row by -1. - Multiply the 2 elements in the first column by -1.
Example 2:
Input: matrix = [[1,2,3],[-1,-2,-3],[1,2,3]] Output: 16 Explanation: We can follow the following step to reach sum equals 16: - Multiply the 2 last elements in the second row by -1.
Constraints:
n == matrix.length == matrix[i].length
2 <= n <= 250
-105 <= matrix[i][j] <= 105
Solutions
-
class Solution { public long maxMatrixSum(int[][] matrix) { long s = 0; int cnt = 0; int mi = Integer.MAX_VALUE; for (var row : matrix) { for (var v : row) { s += Math.abs(v); mi = Math.min(mi, Math.abs(v)); if (v < 0) { ++cnt; } } } if (cnt % 2 == 0 || mi == 0) { return s; } return s - mi * 2; } }
-
class Solution { public: long long maxMatrixSum(vector<vector<int>>& matrix) { long long s = 0; int cnt = 0, mi = INT_MAX; for (auto& row : matrix) { for (int& v : row) { s += abs(v); mi = min(mi, abs(v)); cnt += v < 0; } } if (cnt % 2 == 0 || mi == 0) return s; return s - mi * 2; } };
-
class Solution: def maxMatrixSum(self, matrix: List[List[int]]) -> int: s = cnt = 0 mi = inf for row in matrix: for v in row: s += abs(v) mi = min(mi, abs(v)) if v < 0: cnt += 1 if cnt % 2 == 0 or mi == 0: return s return s - mi * 2
-
func maxMatrixSum(matrix [][]int) int64 { s := 0 cnt, mi := 0, math.MaxInt32 for _, row := range matrix { for _, v := range row { s += abs(v) mi = min(mi, abs(v)) if v < 0 { cnt++ } } } if cnt%2 == 1 { s -= mi * 2 } return int64(s) } func abs(x int) int { if x < 0 { return -x } return x }
-
/** * @param {number[][]} matrix * @return {number} */ var maxMatrixSum = function (matrix) { let cnt = 0; let s = 0; let mi = Infinity; for (const row of matrix) { for (const v of row) { s += Math.abs(v); mi = Math.min(mi, Math.abs(v)); cnt += v < 0; } } if (cnt % 2 == 0) { return s; } return s - mi * 2; };