说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
给你一个下标从 0 开始、大小为 m x n
的整数矩阵 matrix
,新建一个下标从 0 开始、名为 answer
的矩阵。使 answer
与 matrix
相等,接着将其中每个值为 -1
的元素替换为所在列的 最大 元素。
返回矩阵 answer
。
示例 1:
输入: matrix = [[1,2,-1],[4,-1,6],[7,8,9]] 输出: [[1,2,9],[4,8,6],[7,8,9]] 解释: 上图显示了发生替换的元素(蓝色区域)。 - 将单元格 [1][1] 中的值替换为列 1 中的最大值 8 。 - 将单元格 [0][2] 中的值替换为列 2 中的最大值 9 。
示例 2:
输入: matrix = [[3,-1],[5,2]] 输出: [[3,2],[5,2]] 解释: 上图显示了发生替换的元素(蓝色区域)。
提示:
m == matrix.length
n == matrix[i].length
2 <= m, n <= 50
-1 <= matrix[i][j] <= 100
- 测试用例中生成的输入满足每列至少包含一个非负整数。
解题思路
使用一个数组来保存每一列的最大值,遍历矩阵,获取到每一列的最大值,获取到最大值之后再遍历一次矩阵,将矩阵中值为-1
的元素全部替换为其所在列的最大值。
AC代码
/** * @param {number[][]} matrix * @return {number[][]} */ var modifiedMatrix = function (matrix) { const arr = new Array(matrix[0].length).fill(0); for (let i = 0; i < matrix.length; i++) { for (let j = 0; j < matrix[i].length; j++) { arr[j] = Math.max(arr[j], matrix[i][j]); } } for (let i = 0; i < matrix.length; i++) { for (let j = 0; j < matrix[i].length; j++) { if (matrix[i][j] === -1) matrix[i][j] = arr[j]; } } return matrix; };
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。