Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3ddd4aa

Browse files
feat: add solutions to lc problem: No.2359 (doocs#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)

AltStyle によって変換されたページ (->オリジナル) /