题目大意
https://leetcode.com/problems/k-inverse-pairs-array/
给你n和k,n代表了1,2,3….n的数组,找出数组排列的个数满足,有且只有k个逆序对
Example 1:
|
|
Example 2:
|
|
题目分析
计数类型的动态规划,推导思路参考了这里:https://discuss.leetcode.com/topic/93815/java-dp-o-nk-solution
考虑dp[n][k]
和dp[n-1][j]
的关系,分情况,把最大的元素n分别放在数组的第n个位置,第n-1个位置…..第1个位置:
dp[n][k] = dp[n-1][k]+dp[n-1][k-1]+dp[n-1][k-2]+...+dp[n-1][k+1-n+1]+dp[n-1][k-n+1]
然后k->k+1
dp[n][k+1] = dp[n-1][k+1]+dp[n-1][k]+dp[n-1][k-1]+dp[n-1][k-2]+...+dp[n-1][k+1-n]
两式子相减即可得到递推方程,写code时注意一下边界条件,比如第二维如果小于0,则认为该值为0
代码
|
|
时间复杂度:O(n*k)