Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add solutions to lc problem: No.3033 #2338

Merged
merged 1 commit into from
Feb 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 63 additions & 48 deletions solution/3000-3099/3033.Modify the Matrix/README.md
Original file line number Diff line number Diff line change
@@ -44,38 +44,38 @@

## 解法

### 方法一
### 方法一:模拟

我们可以根据题目描述,遍历每一列,找到每一列的最大值,然后再遍历每一列,将值为 -1 的元素替换为该列的最大值。

时间复杂度 $O(m \times n)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。空间复杂度 $O(1)$。

<!-- tabs:start -->

```python
class Solution:
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
rows = len(matrix)
cols = len(matrix[0])
for i in range(cols):
max_val = float('-inf')
for j in range(rows):
max_val = max(max_val, matrix[j][i])
for j in range(rows):
if matrix[j][i] == -1:
matrix[j][i] = max_val
m, n = len(matrix), len(matrix[0])
for j in range(n):
mx = max(matrix[i][j] for i in range(m))
for i in range(m):
if matrix[i][j] == -1:
matrix[i][j] = mx
return matrix
```

```java
class Solution {
public int[][] modifiedMatrix(int[][] matrix) {
int r = matrix.length;
int c = matrix[0].length;
for (int i = 0; i < c; i++) {
int maxs = Integer.MIN_VALUE;
for (int j = 0; j < r; j++) {
maxs = Math.max(maxs, matrix[j][i]);
int m = matrix.length, n = matrix[0].length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
@@ -88,16 +88,15 @@ class Solution {
class Solution {
public:
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
int r = matrix.size();
int c = matrix[0].size();
for (int i = 0; i < c; i++) {
int maxs = INT_MIN;
for (int j = 0; j < r; j++) {
maxs = max(maxs, matrix[j][i]);
int m = matrix.size(), n = matrix[0].size();
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
@@ -108,18 +107,15 @@ public:
```go
func modifiedMatrix(matrix [][]int) [][]int {
r := len(matrix)
c := len(matrix[0])
for i := 0; i < c; i++ {
maxs := math.MinInt32
for j := 0; j < r; j++ {
if matrix[j][i] > maxs {
maxs = matrix[j][i]
}
m, n := len(matrix), len(matrix[0])
for j := 0; j < n; j++ {
mx := -1
for i := 0; i < m; i++ {
mx = max(mx, matrix[i][j])
}
for j := 0; j < r; j++ {
if matrix[j][i] == -1 {
matrix[j][i] = maxs
for i := 0; i < m; i++ {
if matrix[i][j] == -1 {
matrix[i][j] = mx
}
}
}
@@ -129,23 +125,42 @@ func modifiedMatrix(matrix [][]int) [][]int {

```ts
function modifiedMatrix(matrix: number[][]): number[][] {
const rows = matrix.length;
const cols = matrix[0].length;
for (let i = 0; i < cols; i++) {
let maxVal = Number.MIN_SAFE_INTEGER;
for (let j = 0; j < rows; j++) {
maxVal = Math.max(maxVal, matrix[j][i]);
const [m, n] = [matrix.length, matrix[0].length];
for (let j = 0; j < n; ++j) {
let mx = -1;
for (let i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (let j = 0; j < rows; j++) {
if (matrix[j][i] === -1) {
matrix[j][i] = maxVal;
for (let i = 0; i < m; ++i) {
if (matrix[i][j] === -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
```

```cs
public class Solution {
public int[][] ModifiedMatrix(int[][] matrix) {
int m = matrix.Length, n = matrix[0].Length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.Max(mx, matrix[i][j]);
}
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
}
```

<!-- tabs:end -->

<!-- end -->
111 changes: 63 additions & 48 deletions solution/3000-3099/3033.Modify the Matrix/README_EN.md
Original file line number Diff line number Diff line change
@@ -40,38 +40,38 @@

## Solutions

### Solution 1
### Solution 1: Simulation

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.

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)$.

<!-- tabs:start -->

```python
class Solution:
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
rows = len(matrix)
cols = len(matrix[0])
for i in range(cols):
max_val = float('-inf')
for j in range(rows):
max_val = max(max_val, matrix[j][i])
for j in range(rows):
if matrix[j][i] == -1:
matrix[j][i] = max_val
m, n = len(matrix), len(matrix[0])
for j in range(n):
mx = max(matrix[i][j] for i in range(m))
for i in range(m):
if matrix[i][j] == -1:
matrix[i][j] = mx
return matrix
```

```java
class Solution {
public int[][] modifiedMatrix(int[][] matrix) {
int r = matrix.length;
int c = matrix[0].length;
for (int i = 0; i < c; i++) {
int maxs = Integer.MIN_VALUE;
for (int j = 0; j < r; j++) {
maxs = Math.max(maxs, matrix[j][i]);
int m = matrix.length, n = matrix[0].length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
@@ -84,16 +84,15 @@ class Solution {
class Solution {
public:
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
int r = matrix.size();
int c = matrix[0].size();
for (int i = 0; i < c; i++) {
int maxs = INT_MIN;
for (int j = 0; j < r; j++) {
maxs = max(maxs, matrix[j][i]);
int m = matrix.size(), n = matrix[0].size();
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
@@ -104,18 +103,15 @@ public:
```go
func modifiedMatrix(matrix [][]int) [][]int {
r := len(matrix)
c := len(matrix[0])
for i := 0; i < c; i++ {
maxs := math.MinInt32
for j := 0; j < r; j++ {
if matrix[j][i] > maxs {
maxs = matrix[j][i]
}
m, n := len(matrix), len(matrix[0])
for j := 0; j < n; j++ {
mx := -1
for i := 0; i < m; i++ {
mx = max(mx, matrix[i][j])
}
for j := 0; j < r; j++ {
if matrix[j][i] == -1 {
matrix[j][i] = maxs
for i := 0; i < m; i++ {
if matrix[i][j] == -1 {
matrix[i][j] = mx
}
}
}
@@ -125,23 +121,42 @@ func modifiedMatrix(matrix [][]int) [][]int {

```ts
function modifiedMatrix(matrix: number[][]): number[][] {
const rows = matrix.length;
const cols = matrix[0].length;
for (let i = 0; i < cols; i++) {
let maxVal = Number.MIN_SAFE_INTEGER;
for (let j = 0; j < rows; j++) {
maxVal = Math.max(maxVal, matrix[j][i]);
const [m, n] = [matrix.length, matrix[0].length];
for (let j = 0; j < n; ++j) {
let mx = -1;
for (let i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (let j = 0; j < rows; j++) {
if (matrix[j][i] === -1) {
matrix[j][i] = maxVal;
for (let i = 0; i < m; ++i) {
if (matrix[i][j] === -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
```

```cs
public class Solution {
public int[][] ModifiedMatrix(int[][] matrix) {
int m = matrix.Length, n = matrix[0].Length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.Max(mx, matrix[i][j]);
}
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
}
```

<!-- tabs:end -->

<!-- end -->
19 changes: 9 additions & 10 deletions solution/3000-3099/3033.Modify the Matrix/Solution.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
class Solution {
public:
vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {
int r = matrix.size();
int c = matrix[0].size();
for (int i = 0; i < c; i++) {
int maxs = INT_MIN;
for (int j = 0; j < r; j++) {
maxs = max(maxs, matrix[j][i]);
int m = matrix.size(), n = matrix[0].size();
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
};
};
17 changes: 17 additions & 0 deletions solution/3000-3099/3033.Modify the Matrix/Solution.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
public class Solution {
public int[][] ModifiedMatrix(int[][] matrix) {
int m = matrix.Length, n = matrix[0].Length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.Max(mx, matrix[i][j]);
}
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
}
19 changes: 8 additions & 11 deletions solution/3000-3099/3033.Modify the Matrix/Solution.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
func modifiedMatrix(matrix [][]int) [][]int {
r := len(matrix)
c := len(matrix[0])
for i := 0; i < c; i++ {
maxs := math.MinInt32
for j := 0; j < r; j++ {
if matrix[j][i] > maxs {
maxs = matrix[j][i]
}
m, n := len(matrix), len(matrix[0])
for j := 0; j < n; j++ {
mx := -1
for i := 0; i < m; i++ {
mx = max(mx, matrix[i][j])
}
for j := 0; j < r; j++ {
if matrix[j][i] == -1 {
matrix[j][i] = maxs
for i := 0; i < m; i++ {
if matrix[i][j] == -1 {
matrix[i][j] = mx
}
}
}
19 changes: 9 additions & 10 deletions solution/3000-3099/3033.Modify the Matrix/Solution.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
class Solution {
public int[][] modifiedMatrix(int[][] matrix) {
int r = matrix.length;
int c = matrix[0].length;
for (int i = 0; i < c; i++) {
int maxs = Integer.MIN_VALUE;
for (int j = 0; j < r; j++) {
maxs = Math.max(maxs, matrix[j][i]);
int m = matrix.length, n = matrix[0].length;
for (int j = 0; j < n; ++j) {
int mx = -1;
for (int i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (int j = 0; j < r; j++) {
if (matrix[j][i] == -1) {
matrix[j][i] = maxs;
for (int i = 0; i < m; ++i) {
if (matrix[i][j] == -1) {
matrix[i][j] = mx;
}
}
}
return matrix;
}
}
}
15 changes: 6 additions & 9 deletions solution/3000-3099/3033.Modify the Matrix/Solution.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
class Solution:
def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
rows = len(matrix)
cols = len(matrix[0])
for i in range(cols):
max_val = float('-inf')
for j in range(rows):
max_val = max(max_val, matrix[j][i])
for j in range(rows):
if matrix[j][i] == -1:
matrix[j][i] = max_val
m, n = len(matrix), len(matrix[0])
for j in range(n):
mx = max(matrix[i][j] for i in range(m))
for i in range(m):
if matrix[i][j] == -1:
matrix[i][j] = mx
return matrix
17 changes: 8 additions & 9 deletions solution/3000-3099/3033.Modify the Matrix/Solution.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
function modifiedMatrix(matrix: number[][]): number[][] {
const rows = matrix.length;
const cols = matrix[0].length;
for (let i = 0; i < cols; i++) {
let maxVal = Number.MIN_SAFE_INTEGER;
for (let j = 0; j < rows; j++) {
maxVal = Math.max(maxVal, matrix[j][i]);
const [m, n] = [matrix.length, matrix[0].length];
for (let j = 0; j < n; ++j) {
let mx = -1;
for (let i = 0; i < m; ++i) {
mx = Math.max(mx, matrix[i][j]);
}
for (let j = 0; j < rows; j++) {
if (matrix[j][i] === -1) {
matrix[j][i] = maxVal;
for (let i = 0; i < m; ++i) {
if (matrix[i][j] === -1) {
matrix[i][j] = mx;
}
}
}