Skip to content

Commit 3ddd4aa

Browse files
authored
feat: add solutions to lc problem: No.2359 (#4450)
No.2359.Find Closest Node to Given Two Nodes
1 parent c7a3051 commit 3ddd4aa

File tree

4 files changed

+269
-0
lines changed

4 files changed

+269
-0
lines changed

solution/2300-2399/2359.Find Closest Node to Given Two Nodes/README.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff 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 -->

solution/2300-2399/2359.Find Closest Node to Given Two Nodes/README_EN.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff 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 -->
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
}

0 commit comments

Comments
 (0)