Skip to content

Commit 8e9521c

Browse files
committed
feat: add solutions to lc problem: No.1621
No.1621.Number of Sets of K Non-Overlapping Line Segments
1 parent 0e6a516 commit 8e9521c

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

solution/1600-1699/1621.Number of Sets of K Non-Overlapping Line Segments/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,30 @@ func numberOfSets(n int, k int) int {
201201
}
202202
```
203203

204+
### **TypeScript**
205+
206+
```ts
207+
function numberOfSets(n: number, k: number): number {
208+
const f = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
209+
const g = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
210+
f[1][0] = 1;
211+
const mod = 10 ** 9 + 7;
212+
for (let i = 2; i <= n; ++i) {
213+
for (let j = 0; j <= k; ++j) {
214+
f[i][j] = (f[i - 1][j] + g[i - 1][j]) % mod;
215+
g[i][j] = g[i - 1][j];
216+
if (j) {
217+
g[i][j] += f[i - 1][j - 1];
218+
g[i][j] %= mod;
219+
g[i][j] += g[i - 1][j - 1];
220+
g[i][j] %= mod;
221+
}
222+
}
223+
}
224+
return (f[n][k] + g[n][k]) % mod;
225+
}
226+
```
227+
204228
### **...**
205229

206230
```

solution/1600-1699/1621.Number of Sets of K Non-Overlapping Line Segments/README_EN.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,30 @@ func numberOfSets(n int, k int) int {
152152
}
153153
```
154154

155+
### **TypeScript**
156+
157+
```ts
158+
function numberOfSets(n: number, k: number): number {
159+
const f = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
160+
const g = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
161+
f[1][0] = 1;
162+
const mod = 10 ** 9 + 7;
163+
for (let i = 2; i <= n; ++i) {
164+
for (let j = 0; j <= k; ++j) {
165+
f[i][j] = (f[i - 1][j] + g[i - 1][j]) % mod;
166+
g[i][j] = g[i - 1][j];
167+
if (j) {
168+
g[i][j] += f[i - 1][j - 1];
169+
g[i][j] %= mod;
170+
g[i][j] += g[i - 1][j - 1];
171+
g[i][j] %= mod;
172+
}
173+
}
174+
}
175+
return (f[n][k] + g[n][k]) % mod;
176+
}
177+
```
178+
155179
### **...**
156180

157181
```
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function numberOfSets(n: number, k: number): number {
2+
const f = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
3+
const g = Array.from({ length: n + 1 }, _ => new Array(k + 1).fill(0));
4+
f[1][0] = 1;
5+
const mod = 10 ** 9 + 7;
6+
for (let i = 2; i <= n; ++i) {
7+
for (let j = 0; j <= k; ++j) {
8+
f[i][j] = (f[i - 1][j] + g[i - 1][j]) % mod;
9+
g[i][j] = g[i - 1][j];
10+
if (j) {
11+
g[i][j] += f[i - 1][j - 1];
12+
g[i][j] %= mod;
13+
g[i][j] += g[i - 1][j - 1];
14+
g[i][j] %= mod;
15+
}
16+
}
17+
}
18+
return (f[n][k] + g[n][k]) % mod;
19+
}

solution/1600-1699/1624.Largest Substring Between Two Equal Characters/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55-
**方法一:数组/哈希表**
55+
**方法一:数组或哈希表**
5656

57-
用数组或哈希表记录每个字符第一次出现的位置
57+
用数组或哈希表记录字符串 $s$ 每个字符第一次出现的位置。由于本题中字符串 $s$ 只含小写英文字母,因此可以用一个长度为 $26$ 的数组 $d$ 来记录,初始时数组元素值均为 $-1$
5858

59-
遍历字符串每个字符 $c$,若 $c$ 在数组中的值为 $-1$,则更新为当前位置,否则答案更新为当前位置与数组中的值的差值的最大值
59+
遍历字符串 $s$ 中每个字符 $c$,若 $c$ 在数组中的值为 $-1$,则更新为当前位置 $i$;否则我们将答案更新为当前位置 $i$ 与数组中的值 $d[c]$ 的差值的最大值减一,即 $ans = \max (ans, i - d[c]-1)$
6060

61-
时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串长度,而 $C$ 为字符集大小
61+
时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串长度,而 $C$ 为字符串 $s$ 的字符集大小,本题 $C=26$
6262

6363
<!-- tabs:start -->
6464

0 commit comments

Comments
 (0)