LeetCode 2141. Maximum Running Time of N Computers in F#
URL
Maximum Running Time of N Computers - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/2141/main.fsx
open System
let maxRunTime (n: int) (batteries: int list) : int64 =
let rec maxRunTime' (n: int64) (batteries: int64 list) (left: int64) (right: int64) =
if left >= right then
left
else
let mid = right - (right - left) / 2L
let sum' = batteries |> List.fold (fun acc n -> acc + Math.Max(mid, n)) 0L
if sum' >= n * mid then
maxRunTime' n batteries mid right
else
maxRunTime' n batteries left (mid - 1L)
let n' = int64 n
let batteries' = batteries |> List.map int64
let sum = batteries' |> List.sum
maxRunTime' n' batteries' 0L (sum / n')