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