数组中的逆序对
2019-03-06 20:03 YihangZhou 阅读(242) 评论(0) 编辑 收藏 举报题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
示例1
输出
复制7
public class Solution { private long count; private int[] temp; public int InversePairs(int [] array) { if(array.length == 0)return 0; temp = new int[array.length]; mergeSort(array, 0, array.length-1); return (int)(count%1000000007); } public void mergeSort(int nums[], int l, int r) { if(r-l<1)return; int m = l + (r-l)/2; mergeSort(nums, l, m); mergeSort(nums, m+1, r); merge(nums, l, m, r); } public void merge(int nums[], int l, int m, int r) { int i = l; int j = m+1; int k = l; while(i<=m || j<=r) { if(i>m){ temp[k] = nums[j++]; } else if(j>r){ temp[k] = nums[i++]; } else if(nums[i]<nums[j]){ temp[k] = nums[i++]; } else{ this.count += m-i+1; temp[k] = nums[j++]; } k++; } for(k=l;k<=r;k++){ nums[k] = temp[k]; } } }