Skip to content

629. K Inverse Pairs Array

Description

For an integer array nums, an inverse pair is a pair of integers [i, j] where 0 <= i < j < nums.length and nums[i] > nums[j].

Given two integers n and k, return the number of different arrays consisting of numbers from 1 to n such that there are exactly k inverse pairs. Since the answer can be huge, return it modulo 109 + 7.

 

Example 1:

Input: n = 3, k = 0
Output: 1
Explanation: Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pairs.

Example 2:

Input: n = 3, k = 1
Output: 2
Explanation: The array [1,3,2] and [2,1,3] have exactly 1 inverse pair.

 

Constraints:

  • 1 <= n <= 1000
  • 0 <= k <= 1000

 

Solutions

Solution: Dynamic Programming

  • Time complexity: O(nk)
  • Space complexity: O(k)

 

JavaScript

js
/**
 * @param {number} n
 * @param {number} k
 * @return {number}
 */
const kInversePairs = function (n, k) {
  const MODULO = 10 ** 9 + 7;
  let dp = new Array(k + 1).fill(0);

  dp[0] = 1;

  for (let integer = 1; integer <= n; integer++) {
    const current = new Array(k + 1).fill(0);

    current[0] = 1;

    for (let count = 1; count <= k; count++) {
      current[count] = (current[count - 1] + dp[count]) % MODULO;
      if (integer > count) continue;

      current[count] = (current[count] - dp[count - integer] + MODULO) % MODULO;
    }
    dp = current;
  }
  return dp[k];
};

Released under the MIT license