使用归并排序,右边小的上去就可以知道前面有多少个比它大的了
public class Solution { int count = 0; public int InversePairs(int [] array) { if(array.length < 2) return 0; mergeSort(array,0,array.length-1); return count; } public void mergeSort(int[] array,int left,int right){ int mid = left+(right-left)/2; if(left < right){ mergeSort(array,left,mid); mergeSort(array,mid+1,right); merge(array,left,mid,right); } } public void merge(int[] array,int left,int mid,int right){ int[] arr = new int[right-left+1]; int c = 0; int s = left; int l = left; int r = mid+1; while(l <= mid && r <= right ){ if(array[l] <= array[r]){ arr[c] = array[l]; c++; l++; }else{ arr[c] = array[r]; count += mid+1-l; count %= 1000000007; c++; r++; } } while(l <= mid) arr[c++] = array[l++]; while(r <= right) arr[c++] = array[r++]; for(int num:arr){ array[s++] = num; } } }