博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer 数组中的逆序对
阅读量:5020 次
发布时间:2019-06-12

本文共 1876 字,大约阅读时间需要 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 思路:归并排序的思路。具体参考剑指offer P190。 注意点:归并排序有返回值的时候需要建一个变量进行累加,mergeSort里面记得要将tmp拷贝回原数组里面。vector
tmp{vec};或者拷贝的时候,一定要记得i - start。
for (int i = start; i <= end; ++i) {    data[i] = tmp[i - start];}

 

class Solution {public:    long long mergeSort(vector
& data, int start, int mid, int end) { int leftEnd = mid, rightEnd = end; vector
tmp; long long count = 0; while (leftEnd >= start && rightEnd >= mid + 1) { if (data[leftEnd] > data[rightEnd]) { count += rightEnd - mid; tmp.push_back(data[leftEnd--]); } else { tmp.push_back(data[rightEnd--]); } } while (leftEnd >= start) { tmp.push_back(data[leftEnd--]); } while (rightEnd >= mid + 1) { tmp.push_back(data[rightEnd--]); } sort(tmp.begin(),tmp.end()); for (int i = start; i <= end; ++i) { data[i] = tmp[i - start]; } return count;}long long merge(vector
& data, int start, int end) { if (end <= start) { return 0; } int mid = start + (end - start) / 2; long long result = 0; result += merge(data, start, mid); result += merge(data, mid + 1, end); result += mergeSort(data, start, mid, end); return result;}int InversePairs(vector
data) { if (data.size() <= 1) { return 0; } int start = 0, end = data.size() - 1; long long result = merge(data, start, end); return result % 1000000007;}};

 

 

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

你可能感兴趣的文章
实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
查看>>
PHP socket客户端长连接
查看>>
7、shell函数
查看>>
【转】Apache Jmeter发送post请求
查看>>
Nginx 基本 安装..
查看>>
【凸优化】保留凸性的几个方式(交集、仿射变换、投影、线性分式变换)
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
TFS --- GrantBackup Plan Permissions Error
查看>>
傅里叶级数与积分方程
查看>>
软工作业3:用户体验分析——以“南通大学教务管理系统微信公众号”为例
查看>>
Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
查看>>
我们前端跟后端是怎么合作的
查看>>
mysql存储过程
查看>>
洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]
查看>>
letecode [136] - Single Number
查看>>
linux下设置固定IP的方法
查看>>
VMware虚拟机下Linux系统的全屏显示
查看>>
net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
查看>>
高效的jQuery
查看>>
ubuntu 16.04 (软件应用)-输入法
查看>>