题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:题目保证输入的数组中没有的相同的数字
数据范围:对于%50的数据,size<=10^4;对于%75的数据,size<=10^5;对于%100的数据,size<=2*10^5
实现语言:Java
public class Solution { static int pairNum; public int InversePairs(int [] array) { pairNum=0; if(array!=null){ mergeSort(array,0,array.length-1); } return pairNum; } private void mergeSort(int[] array,int start,int end){ int mid=(start+end)>>1; if(start<end){ mergeSort(array,start,mid); mergeSort(array,mid+1,end); mergeHelper(array,start,mid,end); } } private void mergeHelper(int[] arr, int left, int mid, int right) { int[] tmp = new int[right - left + 1]; int i = left; int j = mid + 1; int k = 0; while (i <= mid && j <= right) { if (arr[i] < arr[j]) { tmp[k++] = arr[i++]; } else { tmp[k++] = arr[j++]; pairNum += mid - i + 1; if (pairNum > 1000000007) { pairNum %= 1000000007; } } } while (i <= mid) { tmp[k++] = arr[i++]; } while (j <= right) { tmp[k++] = arr[j++]; } for (int m = 0; m < tmp.length; m++) { arr[m + left] = tmp[m]; } } }