Skip to content

Latest commit

 

History

History
60 lines (50 loc) · 1.9 KB

File metadata and controls

60 lines (50 loc) · 1.9 KB

1975. Maximum Matrix Sum

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 (Rust)

1. Solution

impl Solution {
    pub fn max_matrix_sum(matrix: Vec<Vec<i32>>) -> i64 {
        let mut count_neg_even = true;
        let mut min_abs = i32::MAX;
        let mut ret = 0;

        for i in 0..matrix.len() {
            for j in 0..matrix.len() {
                if matrix[i][j] < 0 {
                    count_neg_even = !count_neg_even;
                }
                min_abs = min_abs.min(matrix[i][j].abs());
                ret += matrix[i][j].abs() as i64;
            }
        }

        if !count_neg_even {
            ret -= 2 * min_abs as i64;
        }

        ret
    }
}