Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 485a4b9

Browse files
committed
feat: add solutions to lc problem: No.1537
No.1537.Get the Maximum Score
1 parent 461e6ad commit 485a4b9

File tree

9 files changed

+421
-45
lines changed

9 files changed

+421
-45
lines changed

‎solution/1100-1199/1156.Swap For Longest Repeated Character Substring/README.md‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@
5757

5858
**方法一:双指针**
5959

60-
我们先统计每个字符出现的次数,记录在数组 `cnt`
60+
我们先用哈希表或数组 $cnt$ 统计字符串 $text$ 中每个字符出现的次数
6161

62-
然后我们使用双指针 $i$ 和 $j$,初始时 $i = j = 0,ドル然后我们不断地向右移动 $j$,直到 $j$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $l = j - i$ 的子串,其中所有字符都相同。然后我们跳过第 $j$ 个字符,用指针 $k$ 继续向右移动,直到 $k$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $r = k - j - 1$ 的子串,其中所有字符都相同。此时我们可以得到的最长子串长度为 $min(l + r + 1, cnt[text[i]]),ドル其中 $cnt[text[i]]$ 表示字符 $text[i]$ 出现的次数。我们将这个值与当前的最大值进行比较,取较大值作为答案
62+
接下来,我们定义一个指针 $i,ドル初始时 $i = 0$。每一次,我们将指针 $j$ 指向 $i$,并不断地向右移动 $j,ドル直到 $j$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $l = j - i$ 的子串 $text[i..j-1],ドル其中所有字符都相同
6363

64-
时间复杂度为 $O(n),ドル空间复杂度 $O(C)$。其中 $n$ 为字符串的长度,而 $C$ 为字符集的大小。本题中 $C = 26$。
64+
然后我们跳过指针 $j$ 指向的字符,用指针 $k$ 继续向右移动,直到 $k$ 指向的字符与 $i$ 指向的字符不同,此时我们得到了一个长度为 $r = k - j - 1$ 的子串 $text[j+1..k-1],ドル其中所有字符都相同。那么我们最多通过一次交换操作,可以得到的最长单字符重复子串的长度为 $\min(l + r + 1, cnt[text[i]])$。接下来,我们将指针 $i$ 移动到 $j,ドル继续寻找下一个子串。我们取所有满足条件的子串的最大长度即可。
65+
66+
时间复杂度为 $O(n),ドル空间复杂度 $O(C)$。其中 $n$ 为字符串的长度;而 $C$ 为字符集的大小,本题中 $C = 26$。
6567

6668
<!-- tabs:start -->
6769

‎solution/1500-1599/1537.Get the Maximum Score/README.md‎

Lines changed: 146 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,167 @@
7272

7373
<!-- 这里可写通用的实现逻辑 -->
7474

75+
76+
7577
<!-- tabs:start -->
7678

7779
### **Python3**
7880

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

8183
```python
82-
84+
class Solution:
85+
def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
86+
mod = 10**9 + 7
87+
m, n = len(nums1), len(nums2)
88+
i = j = 0
89+
f = g = 0
90+
while i < m or j < n:
91+
if i == m:
92+
g += nums2[j]
93+
j += 1
94+
elif j == n:
95+
f += nums1[i]
96+
i += 1
97+
elif nums1[i] < nums2[j]:
98+
f += nums1[i]
99+
i += 1
100+
elif nums1[i] > nums2[j]:
101+
g += nums2[j]
102+
j += 1
103+
else:
104+
f = g = max(f, g) + nums1[i]
105+
i += 1
106+
j += 1
107+
return max(f, g) % mod
83108
```
84109

85110
### **Java**
86111

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

89114
```java
115+
class Solution {
116+
public int maxSum(int[] nums1, int[] nums2) {
117+
final int mod = (int) 1e9 + 7;
118+
int m = nums1.length, n = nums2.length;
119+
int i = 0, j = 0;
120+
long f = 0, g = 0;
121+
while (i < m || j < n) {
122+
if (i == m) {
123+
g += nums2[j++];
124+
} else if (j == n) {
125+
f += nums1[i++];
126+
} else if (nums1[i] < nums2[j]) {
127+
f += nums1[i++];
128+
} else if (nums1[i] > nums2[j]) {
129+
g += nums2[j++];
130+
} else {
131+
f = g = Math.max(f, g) + nums1[i];
132+
i++;
133+
j++;
134+
}
135+
}
136+
return (int) (Math.max(f, g) % mod);
137+
}
138+
}
139+
```
140+
141+
### **C++**
142+
143+
```cpp
144+
class Solution {
145+
public:
146+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
147+
const int mod = 1e9 + 7;
148+
int m = nums1.size(), n = nums2.size();
149+
int i = 0, j = 0;
150+
long long f = 0, g = 0;
151+
while (i < m || j < n) {
152+
if (i == m) {
153+
g += nums2[j++];
154+
} else if (j == n) {
155+
f += nums1[i++];
156+
} else if (nums1[i] < nums2[j]) {
157+
f += nums1[i++];
158+
} else if (nums1[i] > nums2[j]) {
159+
g += nums2[j++];
160+
} else {
161+
f = g = max(f, g) + nums1[i];
162+
i++;
163+
j++;
164+
}
165+
}
166+
return max(f, g) % mod;
167+
}
168+
};
169+
```
170+
171+
### **Go**
172+
173+
```go
174+
func maxSum(nums1 []int, nums2 []int) int {
175+
const mod int = 1e9 + 7
176+
m, n := len(nums1), len(nums2)
177+
i, j := 0, 0
178+
f, g := 0, 0
179+
for i < m || j < n {
180+
if i == m {
181+
g += nums2[j]
182+
j++
183+
} else if j == n {
184+
f += nums1[i]
185+
i++
186+
} else if nums1[i] < nums2[j] {
187+
f += nums1[i]
188+
i++
189+
} else if nums1[i] > nums2[j] {
190+
g += nums2[j]
191+
j++
192+
} else {
193+
f = max(f, g) + nums1[i]
194+
g = f
195+
i++
196+
j++
197+
}
198+
}
199+
return max(f, g) % mod
200+
}
201+
202+
func max(a, b int) int {
203+
if a > b {
204+
return a
205+
}
206+
return b
207+
}
208+
```
90209

210+
### **TypeScript**
211+
212+
```ts
213+
function maxSum(nums1: number[], nums2: number[]): number {
214+
const mod = 1e9 + 7;
215+
const m = nums1.length;
216+
const n = nums2.length;
217+
let [f, g] = [0, 0];
218+
let [i, j] = [0, 0];
219+
while (i < m || j < n) {
220+
if (i === m) {
221+
g += nums2[j++];
222+
} else if (j === n) {
223+
f += nums1[i++];
224+
} else if (nums1[i] < nums2[j]) {
225+
f += nums1[i++];
226+
} else if (nums1[i] > nums2[j]) {
227+
g += nums2[j++];
228+
} else {
229+
f = g = Math.max(f, g) + nums1[i];
230+
i++;
231+
j++;
232+
}
233+
}
234+
return Math.max(f, g) % mod;
235+
}
91236
```
92237

93238
### **...**

‎solution/1500-1599/1537.Get the Maximum Score/README_EN.md‎

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,156 @@ Maximum sum is obtained with the path [6,7,8,9,10].
6363
### **Python3**
6464

6565
```python
66-
66+
class Solution:
67+
def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
68+
mod = 10**9 + 7
69+
m, n = len(nums1), len(nums2)
70+
i = j = 0
71+
f = g = 0
72+
while i < m or j < n:
73+
if i == m:
74+
g += nums2[j]
75+
j += 1
76+
elif j == n:
77+
f += nums1[i]
78+
i += 1
79+
elif nums1[i] < nums2[j]:
80+
f += nums1[i]
81+
i += 1
82+
elif nums1[i] > nums2[j]:
83+
g += nums2[j]
84+
j += 1
85+
else:
86+
f = g = max(f, g) + nums1[i]
87+
i += 1
88+
j += 1
89+
return max(f, g) % mod
6790
```
6891

6992
### **Java**
7093

7194
```java
95+
class Solution {
96+
public int maxSum(int[] nums1, int[] nums2) {
97+
final int mod = (int) 1e9 + 7;
98+
int m = nums1.length, n = nums2.length;
99+
int i = 0, j = 0;
100+
long f = 0, g = 0;
101+
while (i < m || j < n) {
102+
if (i == m) {
103+
g += nums2[j++];
104+
} else if (j == n) {
105+
f += nums1[i++];
106+
} else if (nums1[i] < nums2[j]) {
107+
f += nums1[i++];
108+
} else if (nums1[i] > nums2[j]) {
109+
g += nums2[j++];
110+
} else {
111+
f = g = Math.max(f, g) + nums1[i];
112+
i++;
113+
j++;
114+
}
115+
}
116+
return (int) (Math.max(f, g) % mod);
117+
}
118+
}
119+
```
120+
121+
### **C++**
122+
123+
```cpp
124+
class Solution {
125+
public:
126+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
127+
const int mod = 1e9 + 7;
128+
int m = nums1.size(), n = nums2.size();
129+
int i = 0, j = 0;
130+
long long f = 0, g = 0;
131+
while (i < m || j < n) {
132+
if (i == m) {
133+
g += nums2[j++];
134+
} else if (j == n) {
135+
f += nums1[i++];
136+
} else if (nums1[i] < nums2[j]) {
137+
f += nums1[i++];
138+
} else if (nums1[i] > nums2[j]) {
139+
g += nums2[j++];
140+
} else {
141+
f = g = max(f, g) + nums1[i];
142+
i++;
143+
j++;
144+
}
145+
}
146+
return max(f, g) % mod;
147+
}
148+
};
149+
```
150+
151+
### **Go**
152+
153+
```go
154+
func maxSum(nums1 []int, nums2 []int) int {
155+
const mod int = 1e9 + 7
156+
m, n := len(nums1), len(nums2)
157+
i, j := 0, 0
158+
f, g := 0, 0
159+
for i < m || j < n {
160+
if i == m {
161+
g += nums2[j]
162+
j++
163+
} else if j == n {
164+
f += nums1[i]
165+
i++
166+
} else if nums1[i] < nums2[j] {
167+
f += nums1[i]
168+
i++
169+
} else if nums1[i] > nums2[j] {
170+
g += nums2[j]
171+
j++
172+
} else {
173+
f = max(f, g) + nums1[i]
174+
g = f
175+
i++
176+
j++
177+
}
178+
}
179+
return max(f, g) % mod
180+
}
181+
182+
func max(a, b int) int {
183+
if a > b {
184+
return a
185+
}
186+
return b
187+
}
188+
```
72189

190+
### **TypeScript**
191+
192+
```ts
193+
function maxSum(nums1: number[], nums2: number[]): number {
194+
const mod = 1e9 + 7;
195+
const m = nums1.length;
196+
const n = nums2.length;
197+
let [f, g] = [0, 0];
198+
let [i, j] = [0, 0];
199+
while (i < m || j < n) {
200+
if (i === m) {
201+
g += nums2[j++];
202+
} else if (j === n) {
203+
f += nums1[i++];
204+
} else if (nums1[i] < nums2[j]) {
205+
f += nums1[i++];
206+
} else if (nums1[i] > nums2[j]) {
207+
g += nums2[j++];
208+
} else {
209+
f = g = Math.max(f, g) + nums1[i];
210+
i++;
211+
j++;
212+
}
213+
}
214+
return Math.max(f, g) % mod;
215+
}
73216
```
74217

75218
### **...**
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
4+
const int mod = 1e9 + 7;
5+
int m = nums1.size(), n = nums2.size();
6+
int i = 0, j = 0;
7+
long long f = 0, g = 0;
8+
while (i < m || j < n) {
9+
if (i == m) {
10+
g += nums2[j++];
11+
} else if (j == n) {
12+
f += nums1[i++];
13+
} else if (nums1[i] < nums2[j]) {
14+
f += nums1[i++];
15+
} else if (nums1[i] > nums2[j]) {
16+
g += nums2[j++];
17+
} else {
18+
f = g = max(f, g) + nums1[i];
19+
i++;
20+
j++;
21+
}
22+
}
23+
return max(f, g) % mod;
24+
}
25+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /