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

数组中的逆序对

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会出现加法溢出的情况。

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务