题目来源于知识星球—英雄算法联盟,七月算法集训专题
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1975.最大方阵和(中等)
1.题目描述
2.解题思路
如果负数的个数是偶数或者出现0,将负数变成正数再累加。
如果负数个数为奇数,将所有数字转换成正数后,排序求和将最小的数变成负数,累加。
3.代码演示(C++)
class Solution
{
public:
long long maxMatrixSum(vector<vector<int>>& m)
{
int n = m.size();
int i, j;
int flag = 0;
long long sum = 0;
vector<int> neg;
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
if(m[i][j] < 0)
{
neg.push_back(m[i][j]);
}
else if(m[i][j] > 0)
{
sum += m[i][j];
}
else
{
flag = 1;
}
}
}
if(flag || neg.size()%2 == 0)
{
for(i = 0; i < neg.size(); ++i)
{
sum += -neg[i];
}
}
else
{
neg.clear();
sum = 0;
for(i = 0; i < n; ++i)
{
for(j = 0; j < n; ++j)
{
if(m[i][j] < 0)
{
m[i][j] = -m[i][j];
}
neg.push_back(m[i][j]);
sum += m[i][j];
}
}
sort(neg.begin(), neg.end());
sum += - 2 * neg[0];
}
return sum;
}
};
4.题目链接
二、840.矩阵中的幻方(中等)
1.题目描述
2.解题思路
下次再来!
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!