LeetCode 354. Russian Doll Envelopes in F#

URL

leetcode.com/problems/russian-doll-envelopes

Code

github.com/syohex/dotnet-study/blob/master/..

let maxEnvelopes (envelopes: (int * int) list) : int =
    let envs =
        envelopes
        |> List.sortWith (fun (w1, h1) (w2, h2) ->
            if w1 = w2 then
                compare h2 h1
            else
                compare w1 w2)

    let dp = Array.zeroCreate envs.Length
    let mutable len = 0

    for (_, height) in envs do
        let p =
            System.Array.BinarySearch(dp, 0, len, height)

        let p' = if p >= 0 then p else -1 * (p + 1)
        dp.[p'] <- height
        if p' = len then len <- len + 1

    len