Skip to content

Commit a8ff7fd

Browse files
committed
May 30
1 parent 4b39d0e commit a8ff7fd

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution:
2+
def __init__(self):
3+
self.edges = []
4+
5+
def __compute_distances(self, start: int) -> list[int]:
6+
distances = [-1] * len(self.edges)
7+
last_node = [(start, 0)] # every node has at-most one outgoing edge
8+
visited = set()
9+
while last_node:
10+
node, distance = last_node.pop()
11+
if node in visited:
12+
continue
13+
distances[node] = distance
14+
visited.add(node)
15+
if self.edges[node] != -1:
16+
last_node.append((self.edges[node], distance + 1))
17+
return distances
18+
19+
def closestMeetingNode(self, edges: list[int], node1: int, node2: int) -> int:
20+
self.edges = edges
21+
distances1, distances2 = map(self.__compute_distances, (node1, node2))
22+
min_idx, max_min_dist = -1, float('inf')
23+
for idx, (d1, d2) in enumerate(zip(distances1, distances2)):
24+
if d1 == -1 or d2 == -1:
25+
continue
26+
curr_max = max(d1, d2)
27+
if curr_max < max_min_dist:
28+
min_idx = idx
29+
max_min_dist = curr_max
30+
return min_idx
31+
32+
33+
def main():
34+
edges = [2, 2, 3, -1]
35+
node1 = 0
36+
node2 = 1
37+
assert Solution().closestMeetingNode(edges, node1, node2) == 2
38+
39+
edges = [1, 2, -1]
40+
node1 = 0
41+
node2 = 2
42+
assert Solution().closestMeetingNode(edges, node1, node2) == 2
43+
44+
45+
if __name__ == '__main__':
46+
main()

2025-05-May-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
| May 27 | [2894. Divisible and Non-divisible Sums Difference](https://leetcode.com/problems/divisible-and-non-divisible-sums-difference/) | Easy | Solved |
3434
| May 28 | []() | | |
3535
| May 29 | []() | | |
36-
| May 30 | []() | | |
36+
| May 30 | [2359. Find Closest Node to Given Two Nodes](https://leetcode.com/problems/find-closest-node-to-given-two-nodes/) | Medium | Solved |
3737
| May 31 | []() | | |
3838

3939

4040
## Summary
4141
| Level | Problems | Solved | Unsolved |
4242
| --- | --- | --- | --- |
4343
| Easy | 7 | 7 | 0 |
44-
| Medium | 13 | 10 | 3 |
44+
| Medium | 14 | 11 | 3 |
4545
| Hard | 6 | 1 | 5 |

0 commit comments

Comments
 (0)