File tree Expand file tree Collapse file tree 12 files changed +595
-71
lines changed
1574.Shortest Subarray to be Removed to Make Array Sorted Expand file tree Collapse file tree 12 files changed +595
-71
lines changed Original file line number Diff line number Diff line change 56
56
57
57
<!-- 这里可写通用的实现逻辑 -->
58
58
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
+
59
67
<!-- tabs:start -->
60
68
61
69
### ** Python3**
65
73
``` python
66
74
class Solution :
67
75
def diagonalSum (self , mat : List[List[int ]]) -> int :
76
+ ans = 0
68
77
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
73
82
```
74
83
75
84
### ** Java**
@@ -79,12 +88,13 @@ class Solution:
79
88
``` java
80
89
class Solution {
81
90
public int diagonalSum (int [][] mat ) {
91
+ int ans = 0 ;
82
92
int n = mat. length;
83
- int res = 0 ;
84
93
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]);
86
96
}
87
- return res ;
97
+ return ans ;
88
98
}
89
99
}
90
100
```
@@ -95,28 +105,29 @@ class Solution {
95
105
class Solution {
96
106
public:
97
107
int diagonalSum(vector<vector<int >>& mat) {
108
+ int ans = 0;
98
109
int n = mat.size();
99
- int res = 0;
100
110
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 ] );
102
113
}
103
- return res ;
114
+ return ans ;
104
115
}
105
116
};
106
117
```
107
118
108
119
### **Go**
109
120
110
121
```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 ]
117
128
}
118
129
}
119
- return res
130
+ return
120
131
}
121
132
```
122
133
Original file line number Diff line number Diff line change @@ -55,24 +55,26 @@ Notice that element mat[1][1] = 5 is counted only once.
55
55
``` python
56
56
class Solution :
57
57
def diagonalSum (self , mat : List[List[int ]]) -> int :
58
+ ans = 0
58
59
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
63
64
```
64
65
65
66
### ** Java**
66
67
67
68
``` java
68
69
class Solution {
69
70
public int diagonalSum (int [][] mat ) {
71
+ int ans = 0 ;
70
72
int n = mat. length;
71
- int res = 0 ;
72
73
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]);
74
76
}
75
- return res ;
77
+ return ans ;
76
78
}
77
79
}
78
80
```
@@ -83,28 +85,29 @@ class Solution {
83
85
class Solution {
84
86
public:
85
87
int diagonalSum(vector<vector<int >>& mat) {
88
+ int ans = 0;
86
89
int n = mat.size();
87
- int res = 0;
88
90
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 ] );
90
93
}
91
- return res ;
94
+ return ans ;
92
95
}
93
96
};
94
97
```
95
98
96
99
### **Go**
97
100
98
101
```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 ]
105
108
}
106
109
}
107
- return res
110
+ return
108
111
}
109
112
```
110
113
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
3
int diagonalSum (vector<vector<int >>& mat) {
4
+ int ans = 0 ;
4
5
int n = mat.size ();
5
- int res = 0 ;
6
6
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]);
8
9
}
9
- return res ;
10
+ return ans ;
10
11
}
11
12
};
Original file line number Diff line number Diff line change 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 ]
7
7
}
8
8
}
9
- return res
9
+ return
10
10
}
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public int diagonalSum (int [][] mat ) {
3
+ int ans = 0 ;
3
4
int n = mat .length ;
4
- int res = 0 ;
5
5
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 ]);
7
8
}
8
- return res ;
9
+ return ans ;
9
10
}
10
11
}
Original file line number Diff line number Diff line change 1
1
class Solution :
2
2
def diagonalSum (self , mat : List [List [int ]]) -> int :
3
+ ans = 0
3
4
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
You can’t perform that action at this time.
0 commit comments