题解 | #数组中的逆序对#

数组中的逆序对

http://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

动态规划算法

逆序对计数sum=0.
从数组大小为2开始,计算逆序对个数。
每次循环数组大小+1,对于第k次循环(数组大小为k+1),逆序对的可能情况只有2种:
1) 2个数都在前k个数中;
2) 第1个数在前k个数中,第2个数就是第k+1个数。
因为每次循环都将逆序对个数直接加到sum中,所以对于第k次循环,只需要处理第2种情况,处理算法是:遍历前k个数,如果大于第k+1个数,则sum++;

最终代码非常简单:
class Solution {
public:
int InversePairs(vector<int> data) {
unsigned int sum=0;
for(int i=1;i<data.size();i++)
{
for(int j=0;j<i;j++)
{
if(data[j]>data[i])
{
sum++;
}
}
}
return sum%1000000007;
}</int>

};

注意,sum的类型是unsigned int,因为int会出现加法溢出的情况。

全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务