Welcome to Subscribe On Youtube
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 consist 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
-
class Solution { public int kInversePairs(int n, int k) { final int mod = (int) 1e9 + 7; int[] f = new int[k + 1]; int[] s = new int[k + 2]; f[0] = 1; Arrays.fill(s, 1); s[0] = 0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= k; ++j) { f[j] = (s[j + 1] - s[Math.max(0, j - (i - 1))] + mod) % mod; } for (int j = 1; j <= k + 1; ++j) { s[j] = (s[j - 1] + f[j - 1]) % mod; } } return f[k]; } }
-
class Solution { public: int kInversePairs(int n, int k) { int f[k + 1]; int s[k + 2]; memset(f, 0, sizeof(f)); f[0] = 1; fill(s, s + k + 2, 1); s[0] = 0; const int mod = 1e9 + 7; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= k; ++j) { f[j] = (s[j + 1] - s[max(0, j - (i - 1))] + mod) % mod; } for (int j = 1; j <= k + 1; ++j) { s[j] = (s[j - 1] + f[j - 1]) % mod; } } return f[k]; } };
-
class Solution: def kInversePairs(self, n: int, k: int) -> int: mod = 10**9 + 7 f = [1] + [0] * k s = [0] * (k + 2) for i in range(1, n + 1): for j in range(1, k + 1): f[j] = (s[j + 1] - s[max(0, j - (i - 1))]) % mod for j in range(1, k + 2): s[j] = (s[j - 1] + f[j - 1]) % mod return f[k]
-
func kInversePairs(n int, k int) int { f := make([]int, k+1) s := make([]int, k+2) f[0] = 1 for i, x := range f { s[i+1] = s[i] + x } const mod = 1e9 + 7 for i := 1; i <= n; i++ { for j := 1; j <= k; j++ { f[j] = (s[j+1] - s[max(0, j-(i-1))] + mod) % mod } for j := 1; j <= k+1; j++ { s[j] = (s[j-1] + f[j-1]) % mod } } return f[k] }
-
function kInversePairs(n: number, k: number): number { const f: number[] = new Array(k + 1).fill(0); f[0] = 1; const s: number[] = new Array(k + 2).fill(1); s[0] = 0; const mod: number = 1e9 + 7; for (let i = 1; i <= n; ++i) { for (let j = 1; j <= k; ++j) { f[j] = (s[j + 1] - s[Math.max(0, j - (i - 1))] + mod) % mod; } for (let j = 1; j <= k + 1; ++j) { s[j] = (s[j - 1] + f[j - 1]) % mod; } } return f[k]; }