Skip to content

Commit 11153c1

Browse files
authored
feat: add solutions to lc problem: No.3033 (doocs#2338)
No.3033.Modify the Matrix
1 parent c31e717 commit 11153c1

File tree

8 files changed

+183
-145
lines changed

8 files changed

+183
-145
lines changed

solution/3000-3099/3033.Modify the Matrix/README.md

+63-48
Original file line numberDiff line numberDiff line change
@@ -44,38 +44,38 @@
4444

4545
## 解法
4646

47-
### 方法一
47+
### 方法一:模拟
48+
49+
我们可以根据题目描述,遍历每一列,找到每一列的最大值,然后再遍历每一列,将值为 -1 的元素替换为该列的最大值。
50+
51+
时间复杂度 $O(m \times n)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。空间复杂度 $O(1)$。
4852

4953
<!-- tabs:start -->
5054

5155
```python
5256
class Solution:
5357
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
54-
rows = len(matrix)
55-
cols = len(matrix[0])
56-
for i in range(cols):
57-
max_val = float('-inf')
58-
for j in range(rows):
59-
max_val = max(max_val, matrix[j][i])
60-
for j in range(rows):
61-
if matrix[j][i] == -1:
62-
matrix[j][i] = max_val
58+
m, n = len(matrix), len(matrix[0])
59+
for j in range(n):
60+
mx = max(matrix[i][j] for i in range(m))
61+
for i in range(m):
62+
if matrix[i][j] == -1:
63+
matrix[i][j] = mx
6364
return matrix
6465
```
6566

6667
```java
6768
class Solution {
6869
public int[][] modifiedMatrix(int[][] matrix) {
69-
int r = matrix.length;
70-
int c = matrix[0].length;
71-
for (int i = 0; i < c; i++) {
72-
int maxs = Integer.MIN_VALUE;
73-
for (int j = 0; j < r; j++) {
74-
maxs = Math.max(maxs, matrix[j][i]);
70+
int m = matrix.length, n = matrix[0].length;
71+
for (int j = 0; j < n; ++j) {
72+
int mx = -1;
73+
for (int i = 0; i < m; ++i) {
74+
mx = Math.max(mx, matrix[i][j]);
7575
}
76-
for (int j = 0; j < r; j++) {
77-
if (matrix[j][i] == -1) {
78-
matrix[j][i] = maxs;
76+
for (int i = 0; i < m; ++i) {
77+
if (matrix[i][j] == -1) {
78+
matrix[i][j] = mx;
7979
}
8080
}
8181
}
@@ -88,16 +88,15 @@ class Solution {
8888
class Solution {
8989
public:
9090
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
91-
int r = matrix.size();
92-
int c = matrix[0].size();
93-
for (int i = 0; i < c; i++) {
94-
int maxs = INT_MIN;
95-
for (int j = 0; j < r; j++) {
96-
maxs = max(maxs, matrix[j][i]);
91+
int m = matrix.size(), n = matrix[0].size();
92+
for (int j = 0; j < n; ++j) {
93+
int mx = -1;
94+
for (int i = 0; i < m; ++i) {
95+
mx = max(mx, matrix[i][j]);
9796
}
98-
for (int j = 0; j < r; j++) {
99-
if (matrix[j][i] == -1) {
100-
matrix[j][i] = maxs;
97+
for (int i = 0; i < m; ++i) {
98+
if (matrix[i][j] == -1) {
99+
matrix[i][j] = mx;
101100
}
102101
}
103102
}
@@ -108,18 +107,15 @@ public:
108107
109108
```go
110109
func modifiedMatrix(matrix [][]int) [][]int {
111-
r := len(matrix)
112-
c := len(matrix[0])
113-
for i := 0; i < c; i++ {
114-
maxs := math.MinInt32
115-
for j := 0; j < r; j++ {
116-
if matrix[j][i] > maxs {
117-
maxs = matrix[j][i]
118-
}
110+
m, n := len(matrix), len(matrix[0])
111+
for j := 0; j < n; j++ {
112+
mx := -1
113+
for i := 0; i < m; i++ {
114+
mx = max(mx, matrix[i][j])
119115
}
120-
for j := 0; j < r; j++ {
121-
if matrix[j][i] == -1 {
122-
matrix[j][i] = maxs
116+
for i := 0; i < m; i++ {
117+
if matrix[i][j] == -1 {
118+
matrix[i][j] = mx
123119
}
124120
}
125121
}
@@ -129,23 +125,42 @@ func modifiedMatrix(matrix [][]int) [][]int {
129125

130126
```ts
131127
function modifiedMatrix(matrix: number[][]): number[][] {
132-
const rows = matrix.length;
133-
const cols = matrix[0].length;
134-
for (let i = 0; i < cols; i++) {
135-
let maxVal = Number.MIN_SAFE_INTEGER;
136-
for (let j = 0; j < rows; j++) {
137-
maxVal = Math.max(maxVal, matrix[j][i]);
128+
const [m, n] = [matrix.length, matrix[0].length];
129+
for (let j = 0; j < n; ++j) {
130+
let mx = -1;
131+
for (let i = 0; i < m; ++i) {
132+
mx = Math.max(mx, matrix[i][j]);
138133
}
139-
for (let j = 0; j < rows; j++) {
140-
if (matrix[j][i] === -1) {
141-
matrix[j][i] = maxVal;
134+
for (let i = 0; i < m; ++i) {
135+
if (matrix[i][j] === -1) {
136+
matrix[i][j] = mx;
142137
}
143138
}
144139
}
145140
return matrix;
146141
}
147142
```
148143

144+
```cs
145+
public class Solution {
146+
public int[][] ModifiedMatrix(int[][] matrix) {
147+
int m = matrix.Length, n = matrix[0].Length;
148+
for (int j = 0; j < n; ++j) {
149+
int mx = -1;
150+
for (int i = 0; i < m; ++i) {
151+
mx = Math.Max(mx, matrix[i][j]);
152+
}
153+
for (int i = 0; i < m; ++i) {
154+
if (matrix[i][j] == -1) {
155+
matrix[i][j] = mx;
156+
}
157+
}
158+
}
159+
return matrix;
160+
}
161+
}
162+
```
163+
149164
<!-- tabs:end -->
150165

151166
<!-- end -->

solution/3000-3099/3033.Modify the Matrix/README_EN.md

+63-48
Original file line numberDiff line numberDiff line change
@@ -40,38 +40,38 @@
4040

4141
## Solutions
4242

43-
### Solution 1
43+
### Solution 1: Simulation
44+
45+
We can follow the problem description, traverse each column, find the maximum value of each column, and then traverse each column again, replacing the elements with a value of -1 with the maximum value of that column.
46+
47+
The time complexity is $O(m \times n)$, where $m$ and $n$ are the number of rows and columns of the matrix, respectively. The space complexity is $O(1)$.
4448

4549
<!-- tabs:start -->
4650

4751
```python
4852
class Solution:
4953
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
50-
rows = len(matrix)
51-
cols = len(matrix[0])
52-
for i in range(cols):
53-
max_val = float('-inf')
54-
for j in range(rows):
55-
max_val = max(max_val, matrix[j][i])
56-
for j in range(rows):
57-
if matrix[j][i] == -1:
58-
matrix[j][i] = max_val
54+
m, n = len(matrix), len(matrix[0])
55+
for j in range(n):
56+
mx = max(matrix[i][j] for i in range(m))
57+
for i in range(m):
58+
if matrix[i][j] == -1:
59+
matrix[i][j] = mx
5960
return matrix
6061
```
6162

6263
```java
6364
class Solution {
6465
public int[][] modifiedMatrix(int[][] matrix) {
65-
int r = matrix.length;
66-
int c = matrix[0].length;
67-
for (int i = 0; i < c; i++) {
68-
int maxs = Integer.MIN_VALUE;
69-
for (int j = 0; j < r; j++) {
70-
maxs = Math.max(maxs, matrix[j][i]);
66+
int m = matrix.length, n = matrix[0].length;
67+
for (int j = 0; j < n; ++j) {
68+
int mx = -1;
69+
for (int i = 0; i < m; ++i) {
70+
mx = Math.max(mx, matrix[i][j]);
7171
}
72-
for (int j = 0; j < r; j++) {
73-
if (matrix[j][i] == -1) {
74-
matrix[j][i] = maxs;
72+
for (int i = 0; i < m; ++i) {
73+
if (matrix[i][j] == -1) {
74+
matrix[i][j] = mx;
7575
}
7676
}
7777
}
@@ -84,16 +84,15 @@ class Solution {
8484
class Solution {
8585
public:
8686
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
87-
int r = matrix.size();
88-
int c = matrix[0].size();
89-
for (int i = 0; i < c; i++) {
90-
int maxs = INT_MIN;
91-
for (int j = 0; j < r; j++) {
92-
maxs = max(maxs, matrix[j][i]);
87+
int m = matrix.size(), n = matrix[0].size();
88+
for (int j = 0; j < n; ++j) {
89+
int mx = -1;
90+
for (int i = 0; i < m; ++i) {
91+
mx = max(mx, matrix[i][j]);
9392
}
94-
for (int j = 0; j < r; j++) {
95-
if (matrix[j][i] == -1) {
96-
matrix[j][i] = maxs;
93+
for (int i = 0; i < m; ++i) {
94+
if (matrix[i][j] == -1) {
95+
matrix[i][j] = mx;
9796
}
9897
}
9998
}
@@ -104,18 +103,15 @@ public:
104103
105104
```go
106105
func modifiedMatrix(matrix [][]int) [][]int {
107-
r := len(matrix)
108-
c := len(matrix[0])
109-
for i := 0; i < c; i++ {
110-
maxs := math.MinInt32
111-
for j := 0; j < r; j++ {
112-
if matrix[j][i] > maxs {
113-
maxs = matrix[j][i]
114-
}
106+
m, n := len(matrix), len(matrix[0])
107+
for j := 0; j < n; j++ {
108+
mx := -1
109+
for i := 0; i < m; i++ {
110+
mx = max(mx, matrix[i][j])
115111
}
116-
for j := 0; j < r; j++ {
117-
if matrix[j][i] == -1 {
118-
matrix[j][i] = maxs
112+
for i := 0; i < m; i++ {
113+
if matrix[i][j] == -1 {
114+
matrix[i][j] = mx
119115
}
120116
}
121117
}
@@ -125,23 +121,42 @@ func modifiedMatrix(matrix [][]int) [][]int {
125121

126122
```ts
127123
function modifiedMatrix(matrix: number[][]): number[][] {
128-
const rows = matrix.length;
129-
const cols = matrix[0].length;
130-
for (let i = 0; i < cols; i++) {
131-
let maxVal = Number.MIN_SAFE_INTEGER;
132-
for (let j = 0; j < rows; j++) {
133-
maxVal = Math.max(maxVal, matrix[j][i]);
124+
const [m, n] = [matrix.length, matrix[0].length];
125+
for (let j = 0; j < n; ++j) {
126+
let mx = -1;
127+
for (let i = 0; i < m; ++i) {
128+
mx = Math.max(mx, matrix[i][j]);
134129
}
135-
for (let j = 0; j < rows; j++) {
136-
if (matrix[j][i] === -1) {
137-
matrix[j][i] = maxVal;
130+
for (let i = 0; i < m; ++i) {
131+
if (matrix[i][j] === -1) {
132+
matrix[i][j] = mx;
138133
}
139134
}
140135
}
141136
return matrix;
142137
}
143138
```
144139

140+
```cs
141+
public class Solution {
142+
public int[][] ModifiedMatrix(int[][] matrix) {
143+
int m = matrix.Length, n = matrix[0].Length;
144+
for (int j = 0; j < n; ++j) {
145+
int mx = -1;
146+
for (int i = 0; i < m; ++i) {
147+
mx = Math.Max(mx, matrix[i][j]);
148+
}
149+
for (int i = 0; i < m; ++i) {
150+
if (matrix[i][j] == -1) {
151+
matrix[i][j] = mx;
152+
}
153+
}
154+
}
155+
return matrix;
156+
}
157+
}
158+
```
159+
145160
<!-- tabs:end -->
146161

147162
<!-- end -->
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
class Solution {
22
public:
33
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
4-
int r = matrix.size();
5-
int c = matrix[0].size();
6-
for (int i = 0; i < c; i++) {
7-
int maxs = INT_MIN;
8-
for (int j = 0; j < r; j++) {
9-
maxs = max(maxs, matrix[j][i]);
4+
int m = matrix.size(), n = matrix[0].size();
5+
for (int j = 0; j < n; ++j) {
6+
int mx = -1;
7+
for (int i = 0; i < m; ++i) {
8+
mx = max(mx, matrix[i][j]);
109
}
11-
for (int j = 0; j < r; j++) {
12-
if (matrix[j][i] == -1) {
13-
matrix[j][i] = maxs;
10+
for (int i = 0; i < m; ++i) {
11+
if (matrix[i][j] == -1) {
12+
matrix[i][j] = mx;
1413
}
1514
}
1615
}
1716
return matrix;
1817
}
19-
};
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
public class Solution {
2+
public int[][] ModifiedMatrix(int[][] matrix) {
3+
int m = matrix.Length, n = matrix[0].Length;
4+
for (int j = 0; j < n; ++j) {
5+
int mx = -1;
6+
for (int i = 0; i < m; ++i) {
7+
mx = Math.Max(mx, matrix[i][j]);
8+
}
9+
for (int i = 0; i < m; ++i) {
10+
if (matrix[i][j] == -1) {
11+
matrix[i][j] = mx;
12+
}
13+
}
14+
}
15+
return matrix;
16+
}
17+
}

solution/3000-3099/3033.Modify the Matrix/Solution.go

+8-11
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
func modifiedMatrix(matrix [][]int) [][]int {
2-
r := len(matrix)
3-
c := len(matrix[0])
4-
for i := 0; i < c; i++ {
5-
maxs := math.MinInt32
6-
for j := 0; j < r; j++ {
7-
if matrix[j][i] > maxs {
8-
maxs = matrix[j][i]
9-
}
2+
m, n := len(matrix), len(matrix[0])
3+
for j := 0; j < n; j++ {
4+
mx := -1
5+
for i := 0; i < m; i++ {
6+
mx = max(mx, matrix[i][j])
107
}
11-
for j := 0; j < r; j++ {
12-
if matrix[j][i] == -1 {
13-
matrix[j][i] = maxs
8+
for i := 0; i < m; i++ {
9+
if matrix[i][j] == -1 {
10+
matrix[i][j] = mx
1411
}
1512
}
1613
}

0 commit comments

Comments
 (0)