leetcode:K inverse pairs array
来源:互联网 发布:天津seo点击工具 编辑:程序博客网 时间:2024/05/21 12:49
Given two integers n
and k
, find how many different arrays consist of numbers from 1
to n
such that there are exactly k
inverse pairs.
We define an inverse pair as following: For ith
and jth
element in the array, if i
< j
and a[i]
> a[j]
then it's an inverse pair; Otherwise, it's not.
Since the answer may very large, the answer should be modulo 109 + 7.
Example 1:
Input: n = 3, k = 0Output: 1Explanation: Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pair.
Example 2:
Input: n = 3, k = 1Output: 2Explanation: The array [1,3,2] and [2,1,3] have exactly 1 inverse pair.
Note:
- The integer
n
is in the range [1, 1000] andk
is in the range [0, 1000].
给了1到n总共n个数字,任意排列数组的顺序,使其刚好存在k个翻转对,
而且题目中表结果会很大,要对一个很大的数字取余。对于结果巨大的题目,最先应该考虑的就是DP。
需要一个二维的DP数组,其中dp[i][j]表示1到i的数字中有j个翻转对的排列总数,要求的就是dp[n][k]了,即1到n的数字中有k个翻转对的排列总数。
dp[n+1][k]是1到n+1点数字中有k个翻转对的个数,那么实际上在1到n的数字中的某个位置加上了n+1这个数
dp[n][k] = dp[n - 1][k] + dp[n - 1][k-1] + ... + dp[n - 1][k - n + 1]
class Solution {public: int kInversePairs(int n, int k) { int M = 1000000007; vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0)); dp[0][0] = 1; for (int i = 0; i <= n; ++i) { for (int j = 0; j < i; ++j) { for (int m = 0; m <= k; ++m) { if (m - j >= 0 && m - j <= k) { dp[i][m] = (dp[i][m] + dp[i - 1][m - j]) % M; } } } } return dp[n][k]; }};
阅读全文
0 0
- leetcode:K inverse pairs array
- K Inverse Pairs Array (leetcode)
- Leetcode | K Inverse Pairs Array
- 【LeetCode】629. K Inverse Pairs Array
- leetcode 629 K Inverse Pairs Array
- leetcode 629. K Inverse Pairs Array
- [leetcode]629. K Inverse Pairs Array
- K Inverse Pairs Array
- K Inverse Pairs Array
- 629. K Inverse Pairs Array
- 629. K Inverse Pairs Array
- 629. K Inverse Pairs Array
- 629. K Inverse Pairs Array
- 629. K Inverse Pairs Array
- 629. K Inverse Pairs Array 自制答案
- leetcode 629. K Inverse Pairs Array K个逆序对 + 动态规划DP
- 第十九周:( LeetCode629) K Inverse Pairs Array(c++)
- LeetCode K-diff Pairs in an Array
- js获取指定日期(今天,昨天,后天)
- Json写入和读取
- 背包-贪心法
- Qt5基础(二)编写Qt多窗口程序笔记
- POJ2421_通过Kruskal实现原有树的合并
- leetcode:K inverse pairs array
- 合并表记录
- Hibernate 一对一主键双向关联
- 剑指offer面试题45 圆圈中最后剩下的数字(java实现)
- 关于maven包管理版本冲突的问题
- Ubuntu14.04安装pycharm的步骤
- PAT 甲级1003. Emergency (25) DIJKSTRA
- 新手上路之面向对象 笔记
- Mysql-创建数据库