Medium
You are given an n x n
integer matrix
. You can do the following operation any number of times:
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
class Solution {
fun maxMatrixSum(matrix: Array<IntArray>): Long {
var numNegatives = 0
var totalSum: Long = 0
var minNeg = Int.MIN_VALUE
var minPos = Int.MAX_VALUE
for (ints in matrix) {
for (e in matrix[0].indices) {
val value = ints[e]
if (value < 0) {
numNegatives++
totalSum = totalSum - value
minNeg = Math.max(value, minNeg)
} else {
totalSum = totalSum + value
minPos = Math.min(value, minPos)
}
}
}
val min = Math.min(minPos, -minNeg)
return totalSum - numNegatives % 2 * (min + min)
}
}