LeetCode 2359. Find Closest Node to Given Two Nodes in F#
URL
Find Closest Node to Given Two Nodes - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/2359/main.fsx
let closestMeetingNode (edges: int[]) (node1: int) (node2: int) : int =
let rec getDistance node dist (acc: int[]) =
acc.[node] <- dist
let next = edges.[node]
if next = -1 || acc.[next] <> -1 then
acc
else
getDistance next (dist + 1) acc
let len = edges.Length
let d1 = getDistance node1 0 (Array.init len (fun _ -> -1))
let d2 = getDistance node2 0 (Array.init len (fun _ -> -1))
d1
|> Array.zip d2
|> Array.indexed
|> Array.fold
(fun (closest, minDist) (i, (dist1, dist2)) ->
if dist1 <> -1 && dist2 <> -1 then
let d = System.Math.Max(dist1, dist2)
if d < minDist then i, d else closest, minDist
else
closest, minDist)
(-1, System.Int32.MaxValue)
|> fst