数组中的逆序对
来源:互联网 发布:软件变成仿手绘 编辑:程序博客网 时间:2024/05/16 07:16
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
输入例子:
1,2,3,4,5,6,7,0
输出例子:
7
解题思路:
基于归并排序。
我们可将数据拆分成两个子数组,用两个指针分别指向每个子数组的末尾,每次比较两个指针指向的数字。若第一个子数组中的数字大于第二个子数组的数字,则构成逆序对;
每次比较时,我们都把较大的数字从后往前复制到一个辅助数组中,确保辅助数组中的数字是递增排序的。
再把较大的数字复制到辅助数组之后,把对应相应的指针往前移动一位,接下来进行下一轮比较。
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
输入例子:
1,2,3,4,5,6,7,0
输出例子:
7
解题思路:
基于归并排序。
我们可将数据拆分成两个子数组,用两个指针分别指向每个子数组的末尾,每次比较两个指针指向的数字。若第一个子数组中的数字大于第二个子数组的数字,则构成逆序对;
每次比较时,我们都把较大的数字从后往前复制到一个辅助数组中,确保辅助数组中的数字是递增排序的。
再把较大的数字复制到辅助数组之后,把对应相应的指针往前移动一位,接下来进行下一轮比较。
对每次返回的count mod(1000000007)求余
class Solution{public:long long InversePairsCore(vector<int >&data,vector<int> ©,int start,int end){if(start ==end){copy[start]=data[start];return 0;}int length = (end-start)/2;int i = start+length;int j=end;int indexCopy = end;//leftCount,rightCount 分别为左边子数组和右边子数组逆序对的个数long long leftCount = InversePairsCore(copy,data,start,start+length);long long rightCount = InversePairsCore(copy,data,start+length+1,end);//count为两个子数组进行归并比较时逆序对的个数long long count = 0;while(i>=start && j>=start+length+1){if(data[i]>data[j]){copy[indexCopy--]=data[i--];count+=j-start-length;}else{copy[indexCopy--]=data[j--];}}//将两个子数组中剩余的数字放入到copy中for(;i>=start;--i)copy[indexCopy--]=data[i];for(;j>=start+length+1;--j)copy[indexCopy--] = data[j];return leftCount+rightCount+count;}int InversePairs(vector<int>data){int length = data.size();if(length<=0)return 0;vector<int>copy;for(int i=0;i<length;i++)copy.push_back(data[i]);long long result = InversePairsCore(data,copy,0,length-1);//释放临时容器的元素copy.clear();return result%1000000007;}};
0 0
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- 数组中的逆序对
- android 写的很好的博客
- Git和GitLab的使用
- 微信公众号付款asp.net版本
- matconvnet卷积神经网络库的安装
- cyk的游戏
- 数组中的逆序对
- nodejs开发设计
- iOS版本升级后的问题
- 冬天到了:你检查过你的防冻液了吗!
- 位置无关码、位置有关码、链接地址、加载地址
- SSH框架--OA系统的经典配置
- 创业团队为什么要选择Oracle而不是MySQL?
- 2016/11/22
- mac终端命令大全介绍