作者在解决求数组中的逆序数时,传入的参数是一个vector,则导致传入参数时,每次行参都会复制该vector,导致超时,改为引用后解决
class Solution {//传入参数为引用和指针,可以减少行参复制的时间
public:
const static int maxn = 1000000007;
int cnt=0;
void merge(vector<int> &a,int s,int mid,int e,vector<int> &b){//vector<int> b会超时
int p1=s,p2=mid+1,pb=0;
while(p1<=mid&&p2<=e){
if(a[p1]<a[p2]) b[pb++]=a[p1++];
else {b[pb++]=a[p2++];cnt+=mid-p1+1;if(cnt>=maxn)cnt%=maxn;}
}
while(p1<=mid) b[pb++]=a[p1++];
while(p2<=e) b[pb++]=a[p2++];
for(int i=0;i<pb;i++)a[i+s]=b[i];
}
void merge_sort(vector<int> &a,int s,int e,vector<int> &b){//vector<int> b会超时
if(s>=e) return;
int mid = (e-s)/2+s;
merge_sort(a,s,mid,b);merge_sort(a,mid+1,e,b);
merge(a,s,mid,e,b);
}
int InversePairs(vector<int> data) {
vector<int> b;b.resize(data.size());
merge_sort(data,0,data.size()-1,b);
return cnt;
}
};