Skip to content

Commit bc6756c

Browse files
authored
Create 2359.Find-Closest-Node-to-Given-Two-Nodes.cpp
1 parent a7ff629 commit bc6756c

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution {
2+
public:
3+
vector<int>getDist(vector<int>& edges, int node)
4+
{
5+
int n = edges.size();
6+
vector<int>dist(n, -1);
7+
int i = node;
8+
dist[i] = 0;
9+
while (edges[i]!=-1 && dist[edges[i]]==-1)
10+
{
11+
int j = edges[i];
12+
dist[j] = dist[i] + 1;
13+
i = j;
14+
}
15+
return dist;
16+
}
17+
18+
int closestMeetingNode(vector<int>& edges, int node1, int node2)
19+
{
20+
int n = edges.size();
21+
22+
vector<int>dist1 = getDist(edges, node1);
23+
vector<int>dist2 = getDist(edges, node2);
24+
25+
26+
int ret = INT_MAX;
27+
int ans = -1;
28+
for (int i=0; i<n; i++)
29+
{
30+
if (dist1[i]!=-1 && dist2[i]!=-1)
31+
{
32+
if (max(dist1[i], dist2[i])<ret)
33+
{
34+
ret = max(dist1[i], dist2[i]);
35+
ans = i;
36+
}
37+
else if (max(dist1[i], dist2[i]) == ret)
38+
ans = min(ans, i);
39+
}
40+
}
41+
if (ret!=INT_MAX)
42+
return ans;
43+
else
44+
return -1;
45+
}
46+
};

0 commit comments

Comments
 (0)