数组中的逆序对Java实现
2017-10-03 13:45
344 查看
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
public class Solution { public static int InversePairs(int [] array) { if(array==null||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 = InversePairsCore(array,copy,0,array.length-1);//数值过大求余 return count; } private static int InversePairsCore(int[] array,int[] copy,int low,int high) { if(low==high) { return 0; } int mid = (low+high)>>1; int leftCount = InversePairsCore(array,copy,low,mid)%1000000007; int rightCount = InversePairsCore(array,copy,mid+1,high)%1000000007; int count = 0; int i=mid; int j=high; int locCopy = high; while(i>=low&&j>mid) { if(array[i]>array[j]) { count += j-mid; copy[locCopy--] = array[i--]; if(count>=1000000007)//数值过大求余 { count%=1000000007; } } else { copy[locCopy--] = array[j--]; } } for(;i>=low;i--) { copy[locCopy--]=array[i]; } for(;j>mid;j--) { copy[locCopy--]=array[j]; } for(int s=low;s<=high;s++) { array[s] = copy[s]; } return (leftCount+rightCount+count)%1000000007; } }
相关文章推荐
- 【Java】实现浮点数组的并集以及整型数组的交集和两个字符串数组的逆序排序
- java实现递归将数组逆序输出
- 数据结构与算法分析笔记与总结(java实现)--数组11:数组中的逆序对(﹡)
- 《剑指offer》编程题java实现(九):数组中逆序对的数目
- java实现数组逆序的算法 使用函数两个参数
- 归并排序 & 数组中的逆序对 【java实现】
- java实现数组逆序
- 数组中的逆序对 (java实现)
- 数组中的逆序对(Java实现)
- 使用归并思想查找数组中的逆序对的数量——Java实现
- java实现的递归方法逆序对查找
- 数据结构复习:栈-Java数组实现
- java实现数组的所有组合
- 数据结构复习:队列-Java数组实现
- Java基于可扩充数组的向量实现(算法源码)
- Java实现数组形式的多项式加法、减法、乘法、相除运算
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组
- Java数组实现循环队列
- Java为其for循环实现了针对数组和集合类的新用法
- Java数组实现循环队列