3033.修改矩阵

【LetMeFly】3033.修改矩阵:原地修改

力扣题目链接:https://leetcode.cn/problems/modify-the-matrix/

给你一个下标从 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
  • 测试用例中生成的输入满足每列至少包含一个非负整数。

解题方法:一列一列地计算

先遍历第一列,找出这一列的最大值并记为M,再遍历一次第一列,如果当前位置为-1则将其修改为M。

然后开始遍历第二列,进行相同的操作。

直到遍历完每一列为止,matrix矩阵就变成了题目想要的样子。

  • 时间复杂度$O(size(matrix))$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
for (int j = 0; j < matrix[0].size(); j++) {
int M = matrix[0][j];
for (int i = 1; i < matrix.size(); i++) {
M = max(M, matrix[i][j]);
}
for (int i = 0; i < matrix.size(); i++) {
if (matrix[i][j] == -1) {
matrix[i][j] = M;
}
}
}
return matrix;
}
};

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
func modifiedMatrix(matrix [][]int) [][]int {
for j := 0; j < len(matrix[0]); j++ {
M := matrix[0][j]
for i := 1; i < len(matrix); i++ {
if matrix[i][j] > M {
M = matrix[i][j]
}
}
for i := 0; i < len(matrix); i++ {
if matrix[i][j] == -1 {
matrix[i][j] = M
}
}
}
return matrix
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[][] modifiedMatrix(int[][] matrix) {
for (int j = 0; j < matrix[0].length; j++) {
int M = matrix[0][j];
for (int i = 1; i < matrix.length; i++) {
M = Math.max(M, matrix[i][j]);
}
for (int i = 0; i < matrix.length; i++) {
if (matrix[i][j] == -1) {
matrix[i][j] = M;
}
}
}
return matrix;
}
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
from typing import List

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

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140219034


3033.修改矩阵
https://blog.letmefly.xyz/2024/07/05/LeetCode 3033.修改矩阵/
作者
Tisfy
发布于
2024年7月5日
许可协议