数组中的逆序对
来源:互联网 发布:网络理财产品收益排名 编辑:程序博客网 时间:2024/06/10 07:11
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
思路:拆分之后将子数组排序,排序过程中计算逆序对的个数。合并到上一级继续排序和统计。
import java.util.*;public class Solution { public int InversePairs(int [] array) { return (int)cal(array,0,array.length-1); } public long cal(int[] array,int start,int end){ if(start >= end) return 0; int mid = (start + end) / 2; //分成左右两个子串 long leftCount = cal(array,start,mid); long rightCount = cal(array,mid+1,end); long count = 0; //从左右两个部分的后边开始遍历 int endArrow = end; int startArrow = mid; int[] newArray = new int[end - start +1]; int newArrayIndex = newArray.length - 1; while(newArrayIndex >= 0){ //左右元素都存在 if(startArrow >= start && endArrow >= (mid + 1)){ if(array[startArrow] > array[endArrow]){ newArray[newArrayIndex] = array[startArrow]; count += endArrow - mid ; startArrow--; }else{ newArray[newArrayIndex] = array[endArrow]; endArrow--; } }else if(startArrow >= start){ newArray[newArrayIndex] = array[startArrow]; //count += end - mid + 1; startArrow--; }else if(endArrow >= mid + 1){ newArray[newArrayIndex] = array[endArrow]; endArrow--; } newArrayIndex--; } for(int i = 0,j = start;i < newArray.length;i++,j++){ array[j] = newArray[i]; } return (count + leftCount + rightCount) % 1000000007; }}
阅读全文
0 0
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 双向链表-C/C++-多项式操作
- Maven镜像库,国内常用
- 四、使用jQuery操作页面
- 线性表的基本操作实现及其应用
- JAVA Spring web mvc 学习 之 6:数据类型转换
- 数组中的逆序对
- Trie树(Prefix Tree)介绍
- 数学函数的用法
- python安装深度学习框架
- 分析iOS Crash文件:符号化iOS Crash文件的3种方法
- include指令和include动作有什么区别?
- 前端面试题集合
- 什么是JS中的弱引用?
- JavaScript 数据类型