File tree Expand file tree Collapse file tree 4 files changed +269
-0
lines changed
solution/2300-2399/2359.Find Closest Node to Given Two Nodes Expand file tree Collapse file tree 4 files changed +269
-0
lines changed Original file line number Diff line number Diff line change @@ -344,6 +344,99 @@ impl Solution {
344
344
}
345
345
```
346
346
347
+ #### C#
348
+
349
+ ``` cs
350
+ public class Solution {
351
+ public int ClosestMeetingNode (int [] edges , int node1 , int node2 ) {
352
+ int n = edges .Length ;
353
+ List < int > [] g = new List <int >[n ];
354
+ for (int i = 0 ; i < n ; ++ i ) {
355
+ g [i ] = new List <int >();
356
+ if (edges [i ] != - 1 ) {
357
+ g [i ].Add (edges [i ]);
358
+ }
359
+ }
360
+ int inf = 1 << 30 ;
361
+ int [] f (int i ) {
362
+ int [] dist = new int [n ];
363
+ Array .Fill (dist , inf );
364
+ dist [i ] = 0 ;
365
+ Queue < int > q = new Queue <int >();
366
+ q .Enqueue (i );
367
+ while (q .Count > 0 ) {
368
+ i = q .Dequeue ();
369
+ foreach (int j in g [i ]) {
370
+ if (dist [j ] == inf ) {
371
+ dist [j ] = dist [i ] + 1 ;
372
+ q .Enqueue (j );
373
+ }
374
+ }
375
+ }
376
+ return dist ;
377
+ }
378
+ int [] d1 = f (node1 );
379
+ int [] d2 = f (node2 );
380
+ int ans = - 1 , d = inf ;
381
+ for (int i = 0 ; i < n ; ++ i ) {
382
+ int t = Math .Max (d1 [i ], d2 [i ]);
383
+ if (t < d ) {
384
+ d = t ;
385
+ ans = i ;
386
+ }
387
+ }
388
+ return ans ;
389
+ }
390
+ }
391
+ ```
392
+
393
+ #### Swift
394
+
395
+ ``` swift
396
+ class Solution {
397
+ func closestMeetingNode (_ edges : [Int ], _ node1 : Int , _ node2 : Int ) -> Int {
398
+ let n = edges.count
399
+ var g = [[Int ]](repeating : [], count : n)
400
+ for i in 0 ..< n {
401
+ if edges[i] != -1 {
402
+ g[i].append (edges[i])
403
+ }
404
+ }
405
+ let inf = 1 << 30
406
+
407
+ func f (_ i : Int ) -> [Int ] {
408
+ var dist = [Int ](repeating : inf, count : n)
409
+ dist[i] = 0
410
+ var q = [i]
411
+ var idx = 0
412
+ while idx < q.count {
413
+ let i = q[idx]
414
+ idx += 1
415
+ for j in g[i] {
416
+ if dist[j] == inf {
417
+ dist[j] = dist[i] + 1
418
+ q.append (j)
419
+ }
420
+ }
421
+ }
422
+ return dist
423
+ }
424
+
425
+ let d1 = f (node1)
426
+ let d2 = f (node2)
427
+ var ans = -1 , d = inf
428
+ for i in 0 ..< n {
429
+ let t = max (d1[i], d2[i])
430
+ if t < d {
431
+ d = t
432
+ ans = i
433
+ }
434
+ }
435
+ return ans
436
+ }
437
+ }
438
+ ```
439
+
347
440
<!-- tabs: end -->
348
441
349
442
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -340,6 +340,99 @@ impl Solution {
340
340
}
341
341
```
342
342
343
+ #### C#
344
+
345
+ ``` cs
346
+ public class Solution {
347
+ public int ClosestMeetingNode (int [] edges , int node1 , int node2 ) {
348
+ int n = edges .Length ;
349
+ List < int > [] g = new List <int >[n ];
350
+ for (int i = 0 ; i < n ; ++ i ) {
351
+ g [i ] = new List <int >();
352
+ if (edges [i ] != - 1 ) {
353
+ g [i ].Add (edges [i ]);
354
+ }
355
+ }
356
+ int inf = 1 << 30 ;
357
+ int [] f (int i ) {
358
+ int [] dist = new int [n ];
359
+ Array .Fill (dist , inf );
360
+ dist [i ] = 0 ;
361
+ Queue < int > q = new Queue <int >();
362
+ q .Enqueue (i );
363
+ while (q .Count > 0 ) {
364
+ i = q .Dequeue ();
365
+ foreach (int j in g [i ]) {
366
+ if (dist [j ] == inf ) {
367
+ dist [j ] = dist [i ] + 1 ;
368
+ q .Enqueue (j );
369
+ }
370
+ }
371
+ }
372
+ return dist ;
373
+ }
374
+ int [] d1 = f (node1 );
375
+ int [] d2 = f (node2 );
376
+ int ans = - 1 , d = inf ;
377
+ for (int i = 0 ; i < n ; ++ i ) {
378
+ int t = Math .Max (d1 [i ], d2 [i ]);
379
+ if (t < d ) {
380
+ d = t ;
381
+ ans = i ;
382
+ }
383
+ }
384
+ return ans ;
385
+ }
386
+ }
387
+ ```
388
+
389
+ #### Swift
390
+
391
+ ``` swift
392
+ class Solution {
393
+ func closestMeetingNode (_ edges : [Int ], _ node1 : Int , _ node2 : Int ) -> Int {
394
+ let n = edges.count
395
+ var g = [[Int ]](repeating : [], count : n)
396
+ for i in 0 ..< n {
397
+ if edges[i] != -1 {
398
+ g[i].append (edges[i])
399
+ }
400
+ }
401
+ let inf = 1 << 30
402
+
403
+ func f (_ i : Int ) -> [Int ] {
404
+ var dist = [Int ](repeating : inf, count : n)
405
+ dist[i] = 0
406
+ var q = [i]
407
+ var idx = 0
408
+ while idx < q.count {
409
+ let i = q[idx]
410
+ idx += 1
411
+ for j in g[i] {
412
+ if dist[j] == inf {
413
+ dist[j] = dist[i] + 1
414
+ q.append (j)
415
+ }
416
+ }
417
+ }
418
+ return dist
419
+ }
420
+
421
+ let d1 = f (node1)
422
+ let d2 = f (node2)
423
+ var ans = -1 , d = inf
424
+ for i in 0 ..< n {
425
+ let t = max (d1[i], d2[i])
426
+ if t < d {
427
+ d = t
428
+ ans = i
429
+ }
430
+ }
431
+ return ans
432
+ }
433
+ }
434
+ ```
435
+
343
436
<!-- tabs: end -->
344
437
345
438
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ public class Solution {
2
+ public int ClosestMeetingNode ( int [ ] edges , int node1 , int node2 ) {
3
+ int n = edges . Length ;
4
+ List < int > [ ] g = new List < int > [ n ] ;
5
+ for ( int i = 0 ; i < n ; ++ i ) {
6
+ g [ i ] = new List < int > ( ) ;
7
+ if ( edges [ i ] != - 1 ) {
8
+ g [ i ] . Add ( edges [ i ] ) ;
9
+ }
10
+ }
11
+ int inf = 1 << 30 ;
12
+ int [ ] f ( int i ) {
13
+ int [ ] dist = new int [ n ] ;
14
+ Array . Fill ( dist , inf ) ;
15
+ dist [ i ] = 0 ;
16
+ Queue < int > q = new Queue < int > ( ) ;
17
+ q . Enqueue ( i ) ;
18
+ while ( q . Count > 0 ) {
19
+ i = q . Dequeue ( ) ;
20
+ foreach ( int j in g [ i ] ) {
21
+ if ( dist [ j ] == inf ) {
22
+ dist [ j ] = dist [ i ] + 1 ;
23
+ q . Enqueue ( j ) ;
24
+ }
25
+ }
26
+ }
27
+ return dist ;
28
+ }
29
+ int [ ] d1 = f ( node1 ) ;
30
+ int [ ] d2 = f ( node2 ) ;
31
+ int ans = - 1 , d = inf ;
32
+ for ( int i = 0 ; i < n ; ++ i ) {
33
+ int t = Math . Max ( d1 [ i ] , d2 [ i ] ) ;
34
+ if ( t < d ) {
35
+ d = t ;
36
+ ans = i ;
37
+ }
38
+ }
39
+ return ans ;
40
+ }
41
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ func closestMeetingNode( _ edges: [ Int ] , _ node1: Int , _ node2: Int ) -> Int {
3
+ let n = edges. count
4
+ var g = [ [ Int] ] ( repeating: [ ] , count: n)
5
+ for i in 0 ..< n {
6
+ if edges [ i] != - 1 {
7
+ g [ i] . append ( edges [ i] )
8
+ }
9
+ }
10
+ let inf = 1 << 30
11
+
12
+ func f( _ i: Int ) -> [ Int ] {
13
+ var dist = [ Int] ( repeating: inf, count: n)
14
+ dist [ i] = 0
15
+ var q = [ i]
16
+ var idx = 0
17
+ while idx < q. count {
18
+ let i = q [ idx]
19
+ idx += 1
20
+ for j in g [ i] {
21
+ if dist [ j] == inf {
22
+ dist [ j] = dist [ i] + 1
23
+ q. append ( j)
24
+ }
25
+ }
26
+ }
27
+ return dist
28
+ }
29
+
30
+ let d1 = f ( node1)
31
+ let d2 = f ( node2)
32
+ var ans = - 1 , d = inf
33
+ for i in 0 ..< n {
34
+ let t = max ( d1 [ i] , d2 [ i] )
35
+ if t < d {
36
+ d = t
37
+ ans = i
38
+ }
39
+ }
40
+ return ans
41
+ }
42
+ }
You can’t perform that action at this time.
0 commit comments