一前腾讯员工在网上提问,有中度脂肪肝能入职阿里吗?其实在互联网行业,脂肪肝并不会影响入职的。除了一些航空、航海、高危等特殊职业可能因安全考虑限制录用外,大部分情况下,脂肪肝都不影响入职。
就像一位网友说的:脂肪肝是牛马的标配,实际上职场中不少人都有脂肪肝,我以前体检的时候叫脂肪浸润,后来才知道是轻度脂肪肝,只要不是重度就行,但无论是轻度还是中度都应该引起注意。
![]()
![]()
![]()
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第1975题:最大方阵和,难度是中等。
给你一个 n x n 的整数方阵 matrix 。你可以执行以下操作任意次 :选择 matrix 中相邻两个元素,并将它们都乘以-1 。你的目的是最大化方阵元素的和。请你在执行以上操作之后,返回方阵的最大和。
示例1:
![]()
输入:matrix = [[1,-1],[-1,1]] 输出:4 解释:我们可以执行以下操作使和等于 4 : - 将第一行的 2 个元素乘以 -1 。 - 将第一列的 2 个元素乘以 -1 。
示例2:
![]()
输入:matrix = [[1,2,3],[-1,-2,-3],[1,2,3]] 输出:16 解释:我们可以执行以下操作使和等于 16 : - 将第二行的最后 2 个元素乘以 -1 。
n == matrix.length == matrix[i].length
2 <= n <= 250
-10^5 <= matrix[i][j] <= 10^5
问题分析
这题说的是可以任意选择相邻的两个元素,让他们同时乘以 -1 ,并且可以操作任意次,最后返回矩阵中所有元素之和的最大值。
这题我们来思考一下,如果矩阵中都是正数,我们不需要任何操作,则矩阵中所有元素的和就是最大值。
如果矩阵中有偶数个负数,比如有 2 个负数,无论它俩在什么地方,我们都可以通过相邻元素乘以 -1,最终让两个负数相邻,然后这两个相邻负数同时乘以 -1 ,这样矩阵中所有元素就都是正的了。
如果矩阵中有奇数个负数,无论怎么转换,最终都会有一个负数,我们只需要让绝对值最小的变成负数即可。
搞懂了上面的原理,那么这题就比较简单了,如果矩阵中负数的个数是偶数(包括0),那么最大和就是所有元素绝对值的和。否则(负数的个数为奇数)一定会剩下一个负数,我们选择绝对值最小的数变成负数。
JAVA:
public long maxMatrixSum(int[][] matrix) {
int cnt = 0; // 负数元素的个数
long sum = 0; // 所有元素绝对值的和
int min = Integer.MAX_VALUE; // 绝对值最小的元素
for (int[] ints : matrix) {
for (int num : ints) {
min = Math.min(min, Math.abs(num));
if (num < 0)
cnt++;
sum += Math.abs(num);
}
}
if (cnt % 2 == 0)
return sum;
return sum - 2 * min;
}
C++:
public:
long long maxMatrixSum(vector> &matrix) {
int cnt = 0; // 负数元素的个数
long sum = 0; // 所有元素绝对值的和
int minV = INT_MAX; // 绝对值最小的元素
for (constauto &ints: matrix) {
for (int num: ints) {
minV = min(minV, abs(num));
if (num < 0)
cnt++;
sum += abs(num);
}
}
if (cnt % 2 == 0)
return sum;
return sum - 2 * minV;
}
笔者简介
博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解900多题,对算法题有自己独特的解题思路和解题技巧。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.