LeetCode 1870. Minimum Speed to Arrive on Time in F#
URL
Minimum Speed to Arrive on Time - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/1870/main.fsx
open System
let minSpeedOnTime (dist: int list) (hour: double) : int =
let totalTime speed dist len =
dist
|> List.indexed
|> List.fold
(fun acc (i, (d: double)) ->
let time = d / speed
if i = len - 1 then acc + time else acc + Math.Ceiling(time))
0.0
let rec minSpeedOnTime' left right dist len hour minSpeed =
if left > right then
minSpeed
else
let mid = left + (right - left) / 2
let total = totalTime mid dist len
if total <= hour then
minSpeedOnTime' left (mid - 1) dist len hour mid
else
minSpeedOnTime' (mid + 1) right dist len hour minSpeed
let dist' = List.map double dist
let len = List.length dist
minSpeedOnTime' 0 10_000_000 dist' len hour -1