public class Solution { public int InversePairs(int [] array) { if(array.length==0){ return 0; } int[] copy = new int[array.length]; for(int i = 0;i < array.length; i++){ copy[i] = array[i]; } int count=inversePairsMethod(array,copy,0,array.length-1); return count ; } private static int inversePairsMethod(int[] array, int[] copy, int start, int end) { if(start == end){ copy[start]=array[start]; return 0; } int len = (end - start)/2; int left = inversePairsMethod(copy, array, start, start+len)% 1000000007; int right = inversePairsMethod( copy,array, start + len +1, end)% 1000000007; int i = start + len; int j = end; int index = end; int count = 0; while (i>=start && j >=start + len +1){ if(array[i] > array[j]){ copy[index--]=array[i--]; count += j - start - len; if(count>=1000000007)//数值过大求余 { count%=1000000007; } //count++; }else { copy[index--] = array[j--]; } } for(;i>=start;--i){ copy[index--] = array[i]; } for(;j>=start + len + 1;--j){ copy[index--] = array[j]; } return (count+left+right) % 1000000007; } }