Skip to content

Commit ea3ae02

Browse files
committed
feat: update solutions to lc problems: No.1572,1574
* No.1572.Matrix Diagonal Sum * No.1574.Shortest Subarray to be Removed to Make Array Sorted
1 parent d14c811 commit ea3ae02

File tree

12 files changed

+595
-71
lines changed

12 files changed

+595
-71
lines changed

solution/1500-1599/1572.Matrix Diagonal Sum/README.md

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
**方法一:逐行遍历**
60+
61+
我们可以遍历矩阵的每一行 $row[i]$,对于每一行,我们可以计算出两个对角线上的元素,即 $row[i][i]$ 和 $row[i][n - i - 1]$,其中 $n$ 是矩阵的行数。如果 $i = n - i - 1$,则说明当前行的对角线上只有一个元素,否则有两个元素。我们将其加到答案中即可。
62+
63+
遍历完所有行后,即可得到答案。
64+
65+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 是矩阵的行数。
66+
5967
<!-- tabs:start -->
6068

6169
### **Python3**
@@ -65,11 +73,12 @@
6573
```python
6674
class Solution:
6775
def diagonalSum(self, mat: List[List[int]]) -> int:
76+
ans = 0
6877
n = len(mat)
69-
res = 0
70-
for i in range(n):
71-
res += mat[i][i] + (0 if n - i - 1 == i else mat[i][n - i - 1])
72-
return res
78+
for i, row in enumerate(mat):
79+
j = n - i - 1
80+
ans += row[i] + (0 if j == i else row[j])
81+
return ans
7382
```
7483

7584
### **Java**
@@ -79,12 +88,13 @@ class Solution:
7988
```java
8089
class Solution {
8190
public int diagonalSum(int[][] mat) {
91+
int ans = 0;
8292
int n = mat.length;
83-
int res = 0;
8493
for (int i = 0; i < n; ++i) {
85-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
94+
int j = n - i - 1;
95+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
8696
}
87-
return res;
97+
return ans;
8898
}
8999
}
90100
```
@@ -95,28 +105,29 @@ class Solution {
95105
class Solution {
96106
public:
97107
int diagonalSum(vector<vector<int>>& mat) {
108+
int ans = 0;
98109
int n = mat.size();
99-
int res = 0;
100110
for (int i = 0; i < n; ++i) {
101-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
111+
int j = n - i - 1;
112+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
102113
}
103-
return res;
114+
return ans;
104115
}
105116
};
106117
```
107118
108119
### **Go**
109120
110121
```go
111-
func diagonalSum(mat [][]int) int {
112-
n, res := len(mat), 0
113-
for i := 0; i < n; i++ {
114-
res += mat[i][i]
115-
if n-i-1 != i {
116-
res += mat[i][n-i-1]
122+
func diagonalSum(mat [][]int) (ans int) {
123+
n := len(mat)
124+
for i, row := range mat {
125+
ans += row[i]
126+
if j := n - i - 1; j != i {
127+
ans += row[j]
117128
}
118129
}
119-
return res
130+
return
120131
}
121132
```
122133

solution/1500-1599/1572.Matrix Diagonal Sum/README_EN.md

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,26 @@ Notice that element mat[1][1] = 5 is counted only once.
5555
```python
5656
class Solution:
5757
def diagonalSum(self, mat: List[List[int]]) -> int:
58+
ans = 0
5859
n = len(mat)
59-
res = 0
60-
for i in range(n):
61-
res += mat[i][i] + (0 if n - i - 1 == i else mat[i][n - i - 1])
62-
return res
60+
for i, row in enumerate(mat):
61+
j = n - i - 1
62+
ans += row[i] + (0 if j == i else row[j])
63+
return ans
6364
```
6465

6566
### **Java**
6667

6768
```java
6869
class Solution {
6970
public int diagonalSum(int[][] mat) {
71+
int ans = 0;
7072
int n = mat.length;
71-
int res = 0;
7273
for (int i = 0; i < n; ++i) {
73-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
74+
int j = n - i - 1;
75+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
7476
}
75-
return res;
77+
return ans;
7678
}
7779
}
7880
```
@@ -83,28 +85,29 @@ class Solution {
8385
class Solution {
8486
public:
8587
int diagonalSum(vector<vector<int>>& mat) {
88+
int ans = 0;
8689
int n = mat.size();
87-
int res = 0;
8890
for (int i = 0; i < n; ++i) {
89-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
91+
int j = n - i - 1;
92+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
9093
}
91-
return res;
94+
return ans;
9295
}
9396
};
9497
```
9598
9699
### **Go**
97100
98101
```go
99-
func diagonalSum(mat [][]int) int {
100-
n, res := len(mat), 0
101-
for i := 0; i < n; i++ {
102-
res += mat[i][i]
103-
if n-i-1 != i {
104-
res += mat[i][n-i-1]
102+
func diagonalSum(mat [][]int) (ans int) {
103+
n := len(mat)
104+
for i, row := range mat {
105+
ans += row[i]
106+
if j := n - i - 1; j != i {
107+
ans += row[j]
105108
}
106109
}
107-
return res
110+
return
108111
}
109112
```
110113

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
class Solution {
22
public:
33
int diagonalSum(vector<vector<int>>& mat) {
4+
int ans = 0;
45
int n = mat.size();
5-
int res = 0;
66
for (int i = 0; i < n; ++i) {
7-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
7+
int j = n - i - 1;
8+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
89
}
9-
return res;
10+
return ans;
1011
}
1112
};
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
func diagonalSum(mat [][]int) int {
2-
n, res := len(mat), 0
3-
for i := 0; i < n; i++ {
4-
res += mat[i][i]
5-
if n-i-1 != i {
6-
res += mat[i][n-i-1]
1+
func diagonalSum(mat [][]int) (ans int) {
2+
n := len(mat)
3+
for i, row := range mat {
4+
ans += row[i]
5+
if j := n - i - 1; j != i {
6+
ans += row[j]
77
}
88
}
9-
return res
9+
return
1010
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
class Solution {
22
public int diagonalSum(int[][] mat) {
3+
int ans = 0;
34
int n = mat.length;
4-
int res = 0;
55
for (int i = 0; i < n; ++i) {
6-
res += mat[i][i] + (n - i - 1 == i ? 0 : mat[i][n - i - 1]);
6+
int j = n - i - 1;
7+
ans += mat[i][i] + (i == j ? 0 : mat[i][j]);
78
}
8-
return res;
9+
return ans;
910
}
1011
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
class Solution:
22
def diagonalSum(self, mat: List[List[int]]) -> int:
3+
ans = 0
34
n = len(mat)
4-
res = 0
5-
for i in range(n):
6-
res += mat[i][i] + (0 if n - i - 1 == i else mat[i][n - i - 1])
7-
return res
5+
for i, row in enumerate(mat):
6+
j = n - i - 1
7+
ans += row[i] + (0 if j == i else row[j])
8+
return ans

0 commit comments

Comments
 (0)