LeetCode 2616. Minimize the Maximum Difference of Pairs in F#
URL
Minimize the Maximum Difference of Pairs - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/2616/main.fsx
let minimizeMax (nums: int list) (p: int) : int =
let countValids (nums: int[]) (threshold: int) : int =
let rec countValids' i (nums: int[]) threshold acc =
if i >= nums.Length then
acc
else if nums.[i] - nums.[i - 1] <= threshold then
countValids' (i + 2) nums threshold (acc + 1)
else
countValids' (i + 1) nums threshold acc
countValids' 1 nums threshold 0
let rec minimizeMax' (nums: int[]) left right p =
if left >= right then
left
else
let mid = left + (right - left) / 2
if countValids nums mid >= p then
minimizeMax' nums left mid p
else
minimizeMax' nums (mid + 1) right p
let nums' = nums |> List.sort |> List.toArray
let right = nums'.[nums.Length - 1] - nums'.[0]
minimizeMax' nums' 0 right p