31 lines
993 B
Python
31 lines
993 B
Python
# 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
|
|
|