LeetCode每日一题(1975. Maximum Matrix Sum)

给定一个n×n的矩阵,你可以无限次地选择相邻元素并将其乘以-1。目标是通过这种操作最大化矩阵元素的和。例如,对于矩阵[[1,-1],[-1,1]],最大和为4。问题转化为如何有效地移动负号以达到最大和。策略是将负数配对消除,若负数为奇数,则将其移动到最小绝对值的元素上。" 125044973,12432541,Java虚拟机栈深度探索:影响因素与测试案例,"['java', 'jvm', '内存管理', '后端开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这个题换个说法,其实就是, 我们可以任意的移动负号(-), 当 2 个负号凑到一起可以消除。

如果有偶数个负数, 我们可以把它们都变成正数

如果有奇数个负数, 最终会剩余一个负数,但是因为我们可以自由移动负号, 我们可以把负号移动到绝对值最小的数上以获取最大的加和


impl Solution {
    pub fn max_matrix_sum(matrix: Vec<Vec<i32>>) -> i64 {
        let mut negative_count = 0;
        let mut positives = Vec::new();
        for l in matrix {
            for v in l {
                if v < 0 {
                    negative_count += 1;
                }
                positives.push(v.abs() as i64);
            }
        }
        positives.sort();
        if negative_count % 2 == 1 {
            positives[0] = -positives[0];
        }
        positives.into_iter().sum()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值