diff --git a/medium/find_closest_node_to_given_two_nodes.py b/medium/find_closest_node_to_given_two_nodes.py new file mode 100644 index 0000000..47dbe13 --- /dev/null +++ b/medium/find_closest_node_to_given_two_nodes.py @@ -0,0 +1,31 @@ +# https://leetcode.com/problems/find-closest-node-to-given-two-nodes + +from typing import List + +class Solution: + def closestMeetingNode(self, edges: List[int], node1: int, node2: int) -> int: + node1_dist = [-1] * len(edges) + node2_dist = [-1] * len(edges) + + def traverse(node, edges, dist_list): + dist = 0 + dist_list[node] = 0 + while edges[node] != -1: + node = edges[node] + dist += 1 + if dist_list[node] != -1: + break + dist_list[node] = dist + + traverse(node1, edges, node1_dist) + traverse(node2, edges, node2_dist) + result = -1 + now = float('inf') + for i in range(len(edges)): + if node1_dist[i] == -1 or node2_dist[i] == -1: + continue + if now > max(node1_dist[i], node2_dist[i]): + result = i + now = max(node1_dist[i], node2_dist[i]) + return result +