public class Solution {
public int InversePairs(int[] array) { if(array==null||array.length<2) return 0; int[] copy=new int[array.length]; int ret = mergeCount(array,copy,0,array.length-1); return ret; } private int mergeCount(int[] array, int[] copy, int start, int end){
if(start==end){ copy[start]=array[start]; return 0; } int mid=(start+end)/2; int leftCount=mergeCount(array,copy,start,mid); int rightCount=mergeCount(array,copy,mid+1,end); int index=end; int count=0; int i=mid, j=end; while(i>=start&&j>=mid+1){ if(array[i]>array[j]){ copy[index--]=array[i--]; count+=j-mid; } else { copy[index--]=array[j--]; } } for(;i>=start;i--){ copy[index--]=array[i]; } for(;j>=mid+1;j--){ copy[index--]=array[j]; } for(int s=start; s<=end; s++){ array[s]=copy[s]; } return leftCount+rightCount+count; } }
原文:https://www.cnblogs.com/zhwcs/p/10518626.html