This commit is contained in:
parent
099ac0388d
commit
7763227f07
1 changed files with 31 additions and 0 deletions
31
medium/find_closest_node_to_given_two_nodes.py
Normal file
31
medium/find_closest_node_to_given_two_nodes.py
Normal file
|
|
@ -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
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue