题解 | #数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
用递归方法划分数组,再以归并排序的方法排序的同时统计逆序对。
int mod =1000000007;
void mer(int *data,int *tem,int z,int mid,int y,int *cout){int i=z,j=mid+1,k=0;
while(i<=mid&&j<=y)
{
if(data[i]>data[j])
{
tem[k++]=data[j++];
(*cout)+=mid-i+1;
(*cout)%=mod;
}else{
tem[k++]=data[i++];
}
}
while(i<=mid)
{
tem[k++]=data[i++];
}
while(j<=y)tem[k++]=data[j++];
for(int k=0,i=z;i<=y;i++,k++)
{
data[i]=tem[k];
}
}
void mer_huafen(int *data,int *tem,int z,int y,int *cout){
if(z>=y)return;
int mid = z+(y-z)/2;
mer_huafen(data, tem,z, mid, cout);
mer_huafen(data, tem,mid+1, y, cout);
mer(data,tem,z,mid,y,cout);
}
int InversePairs(int* data, int dataLen ) {
// write code here
int tem[dataLen];
int cout =0;
mer_huafen(data,tem,0,dataLen-1,&cout);
return cout;
}
查看7道真题和解析