Skip to content

Commit f0ed555

Browse files
committed
feat: add solutions to lc problem: No.1975
No.1975.Maximum Matrix Sum
1 parent 42808f4 commit f0ed555

File tree

8 files changed

+340
-2
lines changed

8 files changed

+340
-2
lines changed

solution/1900-1999/1975.Maximum Matrix Sum/README.md

Lines changed: 122 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,143 @@
4949

5050
<!-- 这里可写通用的实现逻辑 -->
5151

52+
**方法一:贪心**
53+
54+
如果矩阵中存在零,或者矩阵中负数的个数为偶数,那么最大和就是矩阵中所有元素的绝对值之和。
55+
56+
否则,说明矩阵中有奇数个负数,最终一定会剩下一个负数,我们选择绝对值最小的数,将其变为负数,这样可以使得最终的和最大。
57+
58+
时间复杂度 $O(m\times n)$,其中 $m$ 和 $n$ 分别是矩阵的行数和列数。
59+
5260
<!-- tabs:start -->
5361

5462
### **Python3**
5563

5664
<!-- 这里可写当前语言的特殊实现逻辑 -->
5765

5866
```python
59-
67+
class Solution:
68+
def maxMatrixSum(self, matrix: List[List[int]]) -> int:
69+
s = cnt = 0
70+
mi = inf
71+
for row in matrix:
72+
for v in row:
73+
s += abs(v)
74+
mi = min(mi, abs(v))
75+
if v < 0:
76+
cnt += 1
77+
if cnt % 2 == 0 or mi == 0:
78+
return s
79+
return s - mi * 2
6080
```
6181

6282
### **Java**
6383

6484
<!-- 这里可写当前语言的特殊实现逻辑 -->
6585

6686
```java
87+
class Solution {
88+
public long maxMatrixSum(int[][] matrix) {
89+
long s = 0;
90+
int cnt = 0;
91+
int mi = Integer.MAX_VALUE;
92+
for (var row : matrix) {
93+
for (var v : row) {
94+
s += Math.abs(v);
95+
mi = Math.min(mi, Math.abs(v));
96+
if (v < 0) {
97+
++cnt;
98+
}
99+
}
100+
}
101+
if (cnt % 2 == 0 || mi == 0) {
102+
return s;
103+
}
104+
return s - mi * 2;
105+
}
106+
}
107+
```
108+
109+
### **C++**
110+
111+
```cpp
112+
class Solution {
113+
public:
114+
long long maxMatrixSum(vector<vector<int>>& matrix) {
115+
long long s = 0;
116+
int cnt = 0, mi = INT_MAX;
117+
for (auto& row : matrix) {
118+
for (int& v : row) {
119+
s += abs(v);
120+
mi = min(mi, abs(v));
121+
cnt += v < 0;
122+
}
123+
}
124+
if (cnt % 2 == 0 || mi == 0) return s;
125+
return s - mi * 2;
126+
}
127+
};
128+
```
129+
130+
### **Go**
131+
132+
```go
133+
func maxMatrixSum(matrix [][]int) int64 {
134+
s := 0
135+
cnt, mi := 0, math.MaxInt32
136+
for _, row := range matrix {
137+
for _, v := range row {
138+
s += abs(v)
139+
mi = min(mi, abs(v))
140+
if v < 0 {
141+
cnt++
142+
}
143+
}
144+
}
145+
if cnt%2 == 1 {
146+
s -= mi * 2
147+
}
148+
return int64(s)
149+
}
150+
151+
func min(a, b int) int {
152+
if a < b {
153+
return a
154+
}
155+
return b
156+
}
157+
158+
func abs(x int) int {
159+
if x < 0 {
160+
return -x
161+
}
162+
return x
163+
}
164+
```
67165

166+
### **JavaScript**
167+
168+
```js
169+
/**
170+
* @param {number[][]} matrix
171+
* @return {number}
172+
*/
173+
var maxMatrixSum = function (matrix) {
174+
let cnt = 0;
175+
let s = 0;
176+
let mi = Infinity;
177+
for (const row of matrix) {
178+
for (const v of row) {
179+
s += Math.abs(v);
180+
mi = Math.min(mi, Math.abs(v));
181+
cnt += v < 0;
182+
}
183+
}
184+
if (cnt % 2 == 0) {
185+
return s;
186+
}
187+
return s - mi * 2;
188+
};
68189
```
69190

70191
### **...**

solution/1900-1999/1975.Maximum Matrix Sum/README_EN.md

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,126 @@
5050
### **Python3**
5151

5252
```python
53-
53+
class Solution:
54+
def maxMatrixSum(self, matrix: List[List[int]]) -> int:
55+
s = cnt = 0
56+
mi = inf
57+
for row in matrix:
58+
for v in row:
59+
s += abs(v)
60+
mi = min(mi, abs(v))
61+
if v < 0:
62+
cnt += 1
63+
if cnt % 2 == 0 or mi == 0:
64+
return s
65+
return s - mi * 2
5466
```
5567

5668
### **Java**
5769

5870
```java
71+
class Solution {
72+
public long maxMatrixSum(int[][] matrix) {
73+
long s = 0;
74+
int cnt = 0;
75+
int mi = Integer.MAX_VALUE;
76+
for (var row : matrix) {
77+
for (var v : row) {
78+
s += Math.abs(v);
79+
mi = Math.min(mi, Math.abs(v));
80+
if (v < 0) {
81+
++cnt;
82+
}
83+
}
84+
}
85+
if (cnt % 2 == 0 || mi == 0) {
86+
return s;
87+
}
88+
return s - mi * 2;
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
long long maxMatrixSum(vector<vector<int>>& matrix) {
99+
long long s = 0;
100+
int cnt = 0, mi = INT_MAX;
101+
for (auto& row : matrix) {
102+
for (int& v : row) {
103+
s += abs(v);
104+
mi = min(mi, abs(v));
105+
cnt += v < 0;
106+
}
107+
}
108+
if (cnt % 2 == 0 || mi == 0) return s;
109+
return s - mi * 2;
110+
}
111+
};
112+
```
113+
114+
### **Go**
115+
116+
```go
117+
func maxMatrixSum(matrix [][]int) int64 {
118+
s := 0
119+
cnt, mi := 0, math.MaxInt32
120+
for _, row := range matrix {
121+
for _, v := range row {
122+
s += abs(v)
123+
mi = min(mi, abs(v))
124+
if v < 0 {
125+
cnt++
126+
}
127+
}
128+
}
129+
if cnt%2 == 1 {
130+
s -= mi * 2
131+
}
132+
return int64(s)
133+
}
134+
135+
func min(a, b int) int {
136+
if a < b {
137+
return a
138+
}
139+
return b
140+
}
141+
142+
func abs(x int) int {
143+
if x < 0 {
144+
return -x
145+
}
146+
return x
147+
}
148+
```
59149

150+
### **JavaScript**
151+
152+
```js
153+
/**
154+
* @param {number[][]} matrix
155+
* @return {number}
156+
*/
157+
var maxMatrixSum = function (matrix) {
158+
let cnt = 0;
159+
let s = 0;
160+
let mi = Infinity;
161+
for (const row of matrix) {
162+
for (const v of row) {
163+
s += Math.abs(v);
164+
mi = Math.min(mi, Math.abs(v));
165+
cnt += v < 0;
166+
}
167+
}
168+
if (cnt % 2 == 0) {
169+
return s;
170+
}
171+
return s - mi * 2;
172+
};
60173
```
61174

62175
### **...**
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
long long maxMatrixSum(vector<vector<int>>& matrix) {
4+
long long s = 0;
5+
int cnt = 0, mi = INT_MAX;
6+
for (auto& row : matrix) {
7+
for (int& v : row) {
8+
s += abs(v);
9+
mi = min(mi, abs(v));
10+
cnt += v < 0;
11+
}
12+
}
13+
if (cnt % 2 == 0 || mi == 0) return s;
14+
return s - mi * 2;
15+
}
16+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
func maxMatrixSum(matrix [][]int) int64 {
2+
s := 0
3+
cnt, mi := 0, math.MaxInt32
4+
for _, row := range matrix {
5+
for _, v := range row {
6+
s += abs(v)
7+
mi = min(mi, abs(v))
8+
if v < 0 {
9+
cnt++
10+
}
11+
}
12+
}
13+
if cnt%2 == 1 {
14+
s -= mi * 2
15+
}
16+
return int64(s)
17+
}
18+
19+
func min(a, b int) int {
20+
if a < b {
21+
return a
22+
}
23+
return b
24+
}
25+
26+
func abs(x int) int {
27+
if x < 0 {
28+
return -x
29+
}
30+
return x
31+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public long maxMatrixSum(int[][] matrix) {
3+
long s = 0;
4+
int cnt = 0;
5+
int mi = Integer.MAX_VALUE;
6+
for (var row : matrix) {
7+
for (var v : row) {
8+
s += Math.abs(v);
9+
mi = Math.min(mi, Math.abs(v));
10+
if (v < 0) {
11+
++cnt;
12+
}
13+
}
14+
}
15+
if (cnt % 2 == 0 || mi == 0) {
16+
return s;
17+
}
18+
return s - mi * 2;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[][]} matrix
3+
* @return {number}
4+
*/
5+
var maxMatrixSum = function (matrix) {
6+
let cnt = 0;
7+
let s = 0;
8+
let mi = Infinity;
9+
for (const row of matrix) {
10+
for (const v of row) {
11+
s += Math.abs(v);
12+
mi = Math.min(mi, Math.abs(v));
13+
cnt += v < 0;
14+
}
15+
}
16+
if (cnt % 2 == 0) {
17+
return s;
18+
}
19+
return s - mi * 2;
20+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def maxMatrixSum(self, matrix: List[List[int]]) -> int:
3+
s = cnt = 0
4+
mi = inf
5+
for row in matrix:
6+
for v in row:
7+
s += abs(v)
8+
mi = min(mi, abs(v))
9+
if v < 0:
10+
cnt += 1
11+
if cnt % 2 == 0 or mi == 0:
12+
return s
13+
return s - mi * 2

solution/2400-2499/2416.Sum of Prefix Scores of Strings/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@
6666

6767
用前缀树维护所有字符串的前缀以及每个前缀出现的次数。
6868

69+
然后遍历每个字符串,累加每个前缀的出现次数即可。
70+
71+
时间复杂度 $O(n\times m)$。其中 $n$, $m$ 分别为字符串数组 `words` 的长度和其中字符串的最大长度。
72+
6973
<!-- tabs:start -->
7074

7175
### **Python3**

0 commit comments

Comments
 (0)