class Solution {
public:
int InversePairs(vector<int> data) {
if(data.size()<=1){
return 0;
}
cnt=0;
mergesort(data,0,data.size()-1);
return cnt;
}
long long cnt;
void mergesort(vector<int> &data,int l,int r){
if(l>=r){
return ;
}
int mid=(l+r)/2;
mergesort(data,l,mid);
mergesort(data,mid+1,r);
mergearray(data,l,mid,r);
}
void mergearray(vector<int> &data,int l,int mid,int r){
int i=l;
int j=mid+1;
vector<int> temp(r-l+1,0);
int k=0;
while(i<=mid&&j<=r){
if(data[i]<=data[j]){
temp[k++]=data[i++];
}else{
temp[k++]=data[j++]; // 456 123 因为123后面是有序的 这个的话 它的个数就是 mid-i+1
cnt+=mid-i+1;
cnt%=1000000007; // 其实就是归并排序 记得要取摸
}
}
while(i<=mid){
temp[k++]=data[i++];
}
while(j<=r){
temp[k++]=data[j++];
}
for(k=0;k<temp.size();k++){
data[l+k]=temp[k];
}
}
};
数组中逆序的对数
猜你喜欢
转载自blog.csdn.net/u010325193/article/details/85849049
今日推荐
周排行