File tree Expand file tree Collapse file tree 3 files changed +142
-0
lines changed
solution/1500-1599/1562.Find Latest Group of Size M Expand file tree Collapse file tree 3 files changed +142
-0
lines changed Original file line number Diff line number Diff line change @@ -289,6 +289,55 @@ func findLatestStep(arr []int, m int) int {
289
289
}
290
290
```
291
291
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
+
292
341
<!-- tabs:end -->
293
342
294
343
<!-- solution:end -->
Original file line number Diff line number Diff line change @@ -269,6 +269,55 @@ func findLatestStep(arr []int, m int) int {
269
269
}
270
270
```
271
271
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
+
272
321
<!-- tabs:end -->
273
322
274
323
<!-- solution:end -->
Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments