修改矩阵

标签: 数组 矩阵

难度: Easy

给你一个下标从 0 开始、大小为 m x n 的整数矩阵 matrix ,新建一个下标从 0 开始、名为 answer 的矩阵。使 answermatrix 相等,接着将其中每个值为 -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
  • 测试用例中生成的输入满足每列至少包含一个非负整数。

Submission

运行时间: 23 ms

内存: 16.1 MB

class Solution:
    def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
        for j in range(len(matrix[0])):
            mx = max(row[j] for row in matrix)
            for row in matrix:
                if row[j] == -1:
                    row[j] = mx
        return matrix

Explain

该题解首先遍历矩阵的每一列。对于每一列,首先计算该列除了-1以外的最大值。然后遍历该列的每一个元素,如果该元素的值为-1,就用这个列的最大值来替换它。这样,经过一次遍历后,所有的-1都被替换成了所在列的最大值。

时间复杂度: O(m*n)

空间复杂度: O(1)

class Solution:
    def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
        # 遍历每一列
        for j in range(len(matrix[0])):
            # 找到当前列的最大值
            mx = max(row[j] for row in matrix if row[j] != -1)
            # 替换当前列中的-1为最大值
            for row in matrix:
                if row[j] == -1:
                    row[j] = mx
        return matrix

Explore

如果整列的元素都是-1,那么在当前题解的实现中,求最大值时不会有任何元素参与比较,因此求最大值会引发异常或者无法得出有效结果。在这种情况下,我们应该定义一个特殊的处理逻辑。例如,可以选择保持这些-1不变,或者设定一个默认值来替换这些-1。具体的处理方法应根据问题的背景和需求来确定。

在题解中,我们在求取每一列的最大值时已经排除了所有的-1。因此,如果列中存在非-1的值,那么这个最大值不会是-1。只有当列中所有的值都是-1时,才会出现无法计算出有效的最大值的情况。在这种情况下,我们可以选择保持-1不变,或者定义一个默认值进行替换。该处理方法应根据实际应用场景来决定。

是的,可以通过一次遍历来计算最大值并同时替换-1。这可以通过在遍历列时,同时记录最大值和需要替换的位置。遍历完成后,再一次性地将记录的位置更新为该列的最大值。这种方法将两个步骤合并为一个步骤,有效减少了遍历次数,提高了效率。