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 {
344344}
345345```
346346
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+
347440<!-- tabs: end -->
348441
349442<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -340,6 +340,99 @@ impl Solution {
340340}
341341```
342342
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+
343436<!-- tabs: end -->
344437
345438<!-- 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