LeetCode in Kotlin

3251. Find the Count of Monotonic Pairs II

Hard

You are given an array of positive integers nums of length n.

We call a pair of non-negative integer arrays (arr1, arr2) monotonic if:

Return the count of monotonic pairs.

Since the answer may be very large, return it modulo 109 + 7.

Example 1:

Input: nums = [2,3,2]

Output: 4

Explanation:

The good pairs are:

  1. ([0, 1, 1], [2, 2, 1])
  2. ([0, 1, 2], [2, 2, 0])
  3. ([0, 2, 2], [2, 1, 0])
  4. ([1, 2, 2], [1, 1, 0])

Example 2:

Input: nums = [5,5,5,5]

Output: 126

Constraints:

Solution

import kotlin.math.max

class Solution {
    fun countOfPairs(nums: IntArray): Int {
        var prefixZeros = 0
        val n = nums.size
        // Calculate prefix zeros
        for (i in 1 until n) {
            prefixZeros += max((nums[i] - nums[i - 1]), 0)
        }
        val row = n + 1
        val col = nums[n - 1] + 1 - prefixZeros
        if (col <= 0) {
            return 0
        }
        // Initialize dp array
        val dp = IntArray(col)
        dp.fill(1)
        // Fill dp array
        for (r in 1 until row) {
            for (c in 1 until col) {
                dp[c] = (dp[c] + dp[c - 1]) % MOD
            }
        }
        return dp[col - 1]
    }

    companion object {
        private const val MOD = 1000000007
    }
}