【剑指offer-解题系列(36)】 数组中的逆序对
来源:互联网 发布:剑灵极品龙女数据 编辑:程序博客网 时间:2024/06/05 14:07
题目描述
输入描述:
题目保证输入的数组中没有的相同的数字
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5
输入例子:
1,2,3,4,5,6,7,0
输出例子:
7
分析
假如写出归并排序的过程后,该方法只需要在归并排序中添加记录总数的一句话就行。
代码实现
int InversePairs(vector<int> a) {
long long total_pairs = 0;
vector<int> temp(a);
mergeSort( a, temp, 0, a.size()-1 , total_pairs);
return total_pairs%1000000007 ;
}
void merge(vector<int>&a,vector<int>&temp, int start,int mid,int end ,long long & total_pairs){
int i = start;
int j = mid+1; ///参照两个数的情况,j不能取mid
int ind = start;
while(i<=mid && j<=end){
if(a[i] <= a[j] ){
temp[ind++]= a[j++];
}
else{
temp[ind++]= a[i++];
total_pairs+= (end-j+1);
}
}
for(int k = i;k<=mid ;k++){
temp[ind++]= a[k];
}
for(int k = j;k<=end;k++)
temp[ind++]= a[k];
for(int k =start;k<=end;k++){
a[k]=temp[k];
}
}
void mergeSort(vector<int>&a,vector<int>&temp,int start,int end ,long long & total_pairs){
int n = a.size();
if(n<=0)
return ;
if(start<end){
int mid = (start + end)/2;
mergeSort( a, temp, start, mid ,total_pairs);
mergeSort( a, temp, mid+1, end ,total_pairs);
merge( a, temp, start, mid, end ,total_pairs);
}
}
- 【剑指offer-解题系列(36)】 数组中的逆序对
- 剑指offer 36 数组中的逆序对
- 剑指offer 36 - 数组中的逆序对
- 《剑指offer》:[36]数组中的逆序对
- 剑指offer 36 数组中的逆序对
- 剑指offer-36-数组中的逆序对
- 数组中的逆序对(剑指offer)
- 剑指offer系列源码-数组中的逆序对
- 剑指offer系列之三十四:数组中的逆序对
- 剑指offer系列之34:数组中的逆序对
- 剑指Offer 36 数组中的逆序对(归并)
- 【剑指offer】数组中的逆序对
- 剑指offer--数组中的逆序对
- 剑指Offer之 - 数组中的逆序对
- 剑指offer之数组中的逆序对
- 《剑指offer》数组中的逆序对
- 【剑指offer】数组中的逆序对
- 剑指offer—数组中的逆序对
- android广播机制
- java使用ResourceBundle访问资源文件(.properties文件)
- POJ1703 并查集
- HTTP状态码详解
- 消息中间件-activemq安全机制
- 【剑指offer-解题系列(36)】 数组中的逆序对
- 远程桌面控制软件
- Java日期格式化-线程安全
- HDU2454 判定简单图
- 前端常问问题总结
- 统一监控报警平台架构设计思路
- mysql 5.6.36 win7 32位免安装版配置
- 【剑指offer-解题系列(37)】 两个链表的第一个公共结点。
- POJ1753 枚举