题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
//归并算法,非递归
class Solution {
public:
int InversePairs(vector<int> data) {
int n=0;
vector<int>tmp;
tmp=data;
for(int step=1;step<data.size();step*=2){
for(int i=0;i+step<data.size();i+=2*step){
int l=0,r=0,cnt=0;
while(l<step&&r<step&&i+step+r<data.size()){
if(data[i+l]<data[i+step+r]){
tmp[i+cnt]=data[i+l];
l++;
cnt++;
}
else{
tmp[i+cnt]=data[i+step+r];
r++;
cnt++;
n+=step-l;
n=n%1000000007;
}
}
while(l<step){
tmp[i+cnt]=data[i+l];
l++;
cnt++;
}
}
data=tmp;
}
return n;
}
};
//这种暴力的算法是不可取的。。。。。。
class Solution {
public:
int InversePairs(vector<int> data) {
int cnt=0;
for(int i=0;i<data.size();++i){
for(int j=i+1;j<data.size();++j){
if(data[i]>data[j])
cnt++;
}
}
return cnt;
}
};