首页 > 技术文章 > LC-1975. 最大方阵和

smilerain 2021-08-23 20:53 原文

  1. 最大方阵和
    给你一个 n x n 的整数方阵 matrix 。你可以执行以下操作 任意次 :
    选择 matrix 中 相邻 两个元素,并将它们都 乘以 -1 。
    如果两个元素有 公共边 ,那么它们就是 相邻 的。
    你的目的是 最大化 方阵元素的和。请你在执行以上操作之后,返回方阵的 最大 和。

示例 1:

image
输入:matrix = [[1,-1],[-1,1]]
输出:4
解释:我们可以执行以下操作使和等于 4 :

  • 将第一行的 2 个元素乘以 -1 。
  • 将第一列的 2 个元素乘以 -1 。

可以交换任意次数,那么题解就是: 1:偶数个负数,那么就可以消除完,矩阵内所有的元素绝对值之和就是答案. 2:奇数个,那么最后肯定还剩最后一个负数,保证他是绝对值中最小的一个即可

class Solution {
public:
    long long maxMatrixSum(vector<vector<int>>& matrix) {
        long long ans = 0, _m = INT_MAX, sum = 0;
        for(auto &kk : matrix) {
            for(auto &k : kk) {
                if(k < 0)  ans++;
                _m =  _m > abs(k) ? abs(k) : _m;   
                sum += abs(k);
            }
        }
        return ans % 2 == 0 ? sum : sum - 2 * _m;
    }
};

推荐阅读