不需要头脑的一题,比较耿直
用一个数组maxCol存下每一列的最大值,然后遍历数组,碰到-1就直接把这一列最大值放上去
var modifiedMatrix = function (matrix) {
let row = matrix.length
let col = matrix[0].length
let res = matrix
let maxCol = new Array(col).fill(0)
for (let i = 0; i < col; ++i) {
let res = 0
for (let j = 0; j < row; ++j) {
res = Math.max(res, matrix[j][i])
maxCol[i] = res
}
}
for (let i = 0; i < row; ++i) {
for (let j = 0; j < col; ++j) {
if (matrix[i][j] === -1) {
res[i][j] = maxCol[j]
}
}
}
return res
};
上面存在一些小问题,拷贝数组应该是深拷贝
然后找每一列的最大值应该用Infinity比较好点,需要在循环外面进行赋值(其实也没必要用maxVal这个中间量)
优化代码
var modifiedMatrix = function(matrix) {
let row = matrix.length;
let col = matrix[0].length;
let res = JSON.parse(JSON.stringify(matrix)); // 深拷贝原始矩阵
let maxCol = new Array(col).fill(0);
// 找到每一列的最大值
for (let i = 0; i < col; ++i) {
let maxVal = -Infinity;
for (let j = 0; j < row; ++j) {
maxVal = Math.max(maxVal, matrix[j][i]);
}
maxCol[i] = maxVal;
}
// 替换矩阵中的 -1 为该列的最大值
for (let i = 0; i < row; ++i) {
for (let j = 0; j < col; ++j) {
if (matrix[i][j] === -1) {
res[i][j] = maxCol[j];
}
}
}
return res;
};
继续优化
var modifiedMatrix = function(matrix) {
let row = matrix.length;
let col = matrix[0].length;
let maxCol = new Array(col).fill(-Infinity);
// 找到每一列的最大值
for (let i = 0; i < row; ++i) {
for (let j = 0; j < col; ++j) {
if (matrix[i][j] !== -1) {
maxCol[j] = Math.max(maxCol[j], matrix[i][j]);
}
}
}
// 创建结果矩阵并替换矩阵中的 -1 为该列的最大值
let res = matrix.map((r, i) =>
r.map((val, j) => val === -1 ? maxCol[j] : val)
);
return res;
};