Skip to content

Commit b1c2f99

Browse files
authored
feat: add js solution to lc problem: No.1562 (doocs#3251)
1 parent 52ea485 commit b1c2f99

File tree

3 files changed

+142
-0
lines changed

3 files changed

+142
-0
lines changed

solution/1500-1599/1562.Find Latest Group of Size M/README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,55 @@ func findLatestStep(arr []int, m int) int {
289289
}
290290
```
291291

292+
#### JavaScript
293+
294+
```js
295+
const findLatestStep = function (arr, m) {
296+
function find(x) {
297+
if (p[x] !== x) {
298+
p[x] = find(p[x]);
299+
}
300+
return p[x];
301+
}
302+
303+
function union(a, b) {
304+
const pa = find(a);
305+
const pb = find(b);
306+
if (pa === pb) {
307+
return;
308+
}
309+
p[pa] = pb;
310+
size[pb] += size[pa];
311+
}
312+
313+
const n = arr.length;
314+
if (m === n) {
315+
return n;
316+
}
317+
const vis = Array(n).fill(false);
318+
const p = Array.from({ length: n }, (_, i) => i);
319+
const size = Array(n).fill(1);
320+
let ans = -1;
321+
for (let i = 0; i < n; ++i) {
322+
const v = arr[i] - 1;
323+
if (v > 0 && vis[v - 1]) {
324+
if (size[find(v - 1)] === m) {
325+
ans = i;
326+
}
327+
union(v, v - 1);
328+
}
329+
if (v < n - 1 && vis[v + 1]) {
330+
if (size[find(v + 1)] === m) {
331+
ans = i;
332+
}
333+
union(v, v + 1);
334+
}
335+
vis[v] = true;
336+
}
337+
return ans;
338+
};
339+
```
340+
292341
<!-- tabs:end -->
293342

294343
<!-- solution:end -->

solution/1500-1599/1562.Find Latest Group of Size M/README_EN.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,55 @@ func findLatestStep(arr []int, m int) int {
269269
}
270270
```
271271

272+
#### JavaScript
273+
274+
```js
275+
const findLatestStep = function (arr, m) {
276+
function find(x) {
277+
if (p[x] !== x) {
278+
p[x] = find(p[x]);
279+
}
280+
return p[x];
281+
}
282+
283+
function union(a, b) {
284+
const pa = find(a);
285+
const pb = find(b);
286+
if (pa === pb) {
287+
return;
288+
}
289+
p[pa] = pb;
290+
size[pb] += size[pa];
291+
}
292+
293+
const n = arr.length;
294+
if (m === n) {
295+
return n;
296+
}
297+
const vis = Array(n).fill(false);
298+
const p = Array.from({ length: n }, (_, i) => i);
299+
const size = Array(n).fill(1);
300+
let ans = -1;
301+
for (let i = 0; i < n; ++i) {
302+
const v = arr[i] - 1;
303+
if (v > 0 && vis[v - 1]) {
304+
if (size[find(v - 1)] === m) {
305+
ans = i;
306+
}
307+
union(v, v - 1);
308+
}
309+
if (v < n - 1 && vis[v + 1]) {
310+
if (size[find(v + 1)] === m) {
311+
ans = i;
312+
}
313+
union(v, v + 1);
314+
}
315+
vis[v] = true;
316+
}
317+
return ans;
318+
};
319+
```
320+
272321
<!-- tabs:end -->
273322

274323
<!-- solution:end -->
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const findLatestStep = function (arr, m) {
2+
function find(x) {
3+
if (p[x] !== x) {
4+
p[x] = find(p[x]);
5+
}
6+
return p[x];
7+
}
8+
9+
function union(a, b) {
10+
const pa = find(a);
11+
const pb = find(b);
12+
if (pa === pb) {
13+
return;
14+
}
15+
p[pa] = pb;
16+
size[pb] += size[pa];
17+
}
18+
19+
const n = arr.length;
20+
if (m === n) {
21+
return n;
22+
}
23+
const vis = Array(n).fill(false);
24+
const p = Array.from({ length: n }, (_, i) => i);
25+
const size = Array(n).fill(1);
26+
let ans = -1;
27+
for (let i = 0; i < n; ++i) {
28+
const v = arr[i] - 1;
29+
if (v > 0 && vis[v - 1]) {
30+
if (size[find(v - 1)] === m) {
31+
ans = i;
32+
}
33+
union(v, v - 1);
34+
}
35+
if (v < n - 1 && vis[v + 1]) {
36+
if (size[find(v + 1)] === m) {
37+
ans = i;
38+
}
39+
union(v, v + 1);
40+
}
41+
vis[v] = true;
42+
}
43+
return ans;
44+
};

0 commit comments

Comments
 (0)