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];
};