public int[] reversePairs(int[] nums) {
mergeSort(nums,0,nums.length-1);
return nums;
}
public void mergeSort(int [] a,int start,int end){
if(start<end){//当子序列中只有一个元素时结束递归
int mid=(start+end)/2;//划分子序列
mergeSort(a, start, mid);//对左侧子序列进行递归排序
mergeSort(a, mid+1, end);//对右侧子序列进行递归排序
//少用空间否则leetcode很可能超时
int[] tmp =new int[end+1-start];
int l=start,r=mid+1,now=0;
//
while(l<=mid&&r<=end){
if(a[l]>a[r]){
tmp[now++]=a[r++];
}else {
tmp[now++]=a[l++];
}
}
//处理某一边排完另一半没排完的情况
while(l<=mid){
tmp[now++]=a[l++];
}
while(r<=end){
tmp[now++]=a[r++];
}
System.arraycopy(tmp, 0, a, start, end+1-start);
}
}