博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
34 数组中的逆序对+改进低效归并排序
阅读量:5335 次
发布时间:2019-06-15

本文共 2085 字,大约阅读时间需要 6 分钟。

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。  即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:    对于%50的数据,size<=10^4    对于%75的数据,size<=10^5    对于%100的数据,size<=2*10^5示例1输入1,2,3,4,5,6,7,0输出7

 

思路:

 

                                                     
 
     
       过程:p1大于p2,因为这时左右两边都是排序数组,所以逆序对是{7,6},{7,4},数目等于此时p2结束位置的右边数组元素个数,p2-p1,
然后按照归并的过程,--p1,记住这个稍微改动的就是归并排序以前是从开始位置比较,这里是从最后一个位置开始比较,采用--的形式,之后需要排序才能copy会原数组,而且这道题不能采用以前的mergesort,就是tmp{vec},这种,必须采用
vector
tempvec;for (int iz = lo; iz <= hi; ++iz) { vec[iz] = tempvec[iz - lo];}

才不超时。

 

class Solution {public:    long long mergesort(vector
&data,int start,int mid,int end){ int lpos = mid,rpos = end; vector
tmp; // vector
tmp{data}超时原因应该是copy占时间 long long cnt = 0; while(lpos >= start && rpos >= mid + 1){ if(data[lpos] > data[rpos]){ cnt += rpos - mid; tmp.push_back(data[lpos--]); } else{ tmp.push_back(data[rpos--]); } } while(lpos >= start ){ tmp.push_back(data[lpos--]); } while(rpos >= mid + 1){ tmp.push_back(data[rpos--]); } sort(tmp.begin(),tmp.end()); for (int i = start; i <= end; ++i) { data[i] = tmp[i - start]; } return cnt; } long long merge(vector
&data,int start,int end){ if(start >= end){ return 0; } long long res = 0; int mid = start + (end - start) / 2; res += merge(data,start,mid); res += merge(data,mid + 1,end); res += mergesort(data,start,mid,end); return res; } int InversePairs(vector
data) { if(data.size() <= 1){ return 0; } long long cnt = 0; cnt = merge(data,0,data.size() - 1); return cnt % 1000000007; }};

 

 

转载于:https://www.cnblogs.com/dingxiaoqiang/p/8186372.html

你可能感兴趣的文章
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
关于System.__ComObject一些问题
查看>>
java stringbuffer二
查看>>
[hihoCoder] 拓扑排序·一
查看>>
(转)接口测试用例设计(详细干货)
查看>>
js Math对象方法 (个人学习笔记)
查看>>
helm-chart-2-chart结构和简单模板
查看>>
转载Repository 和Unit of work的使用说明
查看>>
POJ 3461 还是两种方法
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>
win8.1安装Python提示缺失api-ms-win-crt-runtime-l1-1-0.dll问题
查看>>
mysql授权grant
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
【乱搞】【AOJ-574】爱就大声说出来
查看>>
Clojure编写一个阶乘程序 使用递归
查看>>
zbb20190703 搭建vue工程并配置idea开发工具
查看>>
Android Studio的git功能的使用介绍
查看>>
【转载】Vim查找替换及正则表达式的使用
查看>>
u3D大场景的优化
查看>>