原创博文,转载请注明出处!
本题牛客网地址

博客文章索引地址

博客文章中代码的github地址

1.题目

2.思路

3.代码

  1 class Solution {
2 public:
3 int InversePairs(vector<int> data) {
4 if(data.size() == 0){
5 return 0;
6 }
7 // 排序的辅助数组
8 vector<int> copy;
9 for(int i = 0; i < data.size(); ++i){
10 copy.push_back(data[i]);
11 }
12 return InversePairsCore(data, copy, 0, data.size() - 1) % 1000000007;
13 }
14 long InversePairsCore(vector<int> &data, vector<int> &copy, int begin, int end){
15 // 如果指向相同位置,则没有逆序对。
16 if(begin == end){
17 copy[begin] = data[end];
18 return 0;
19 }
20 // 求中点
21 int mid = (end + begin) >> 1;
22 // 使data左半段有序,并返回左半段逆序对的数目
23 long leftCount = InversePairsCore(copy, data, begin, mid);
24 // 使data右半段有序,并返回右半段逆序对的数目
25 long rightCount = InversePairsCore(copy, data, mid + 1, end);
26
27 int i = mid; // i初始化为前半段最后一个数字的下标
28 int j = end; // j初始化为后半段最后一个数字的下标
29 int indexcopy = end; // 辅助数组复制的数组的最后一个数字的下标
30 long count = 0; // 计数,逆序对的个数,注意类型
31
32 while(i >= begin && j >= mid + 1){
33 if(data[i] > data[j]){
34 copy[indexcopy--] = data[i--];
35 count += j - mid;
36 }
37 else{
38 copy[indexcopy--] = data[j--];
39 }
40 }
41 for(;i >= begin; --i){
42 copy[indexcopy--] = data[i];
43 }
44 for(;j >= mid + 1; --j){
45 copy[indexcopy--] = data[j];
46 }
47 return leftCount + rightCount + count;
48 }
49 };

最新文章

  1. ecshop 后台分页功能
  2. Y+的一些讨论
  3. Timer和DPC
  4. 模拟淘宝使用cookie记录登录名,
  5. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
  6. Chap6: question38 - 42
  7. Objective-C的对象模型
  8. hdu 4605 Magic Ball Game
  9. Photography theory: a beginner&#39;s guide(telegraph.co.uk)
  10. dede标签:定义文件夹
  11. [UWP]新控件ColorPicker
  12. springboot中配置文件application.properties的理解
  13. Git 帮助
  14. 25. Reverse Nodes in k-Group (JAVA)
  15. Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟
  16. 常用类:Object
  17. 【转】 pthread设置线程的调度策略和优先级
  18. iOS 项目一直在后台执行
  19. 升级cocoapods1.1.1版本
  20. 两条命令在Linux主机之间建立信任关系

热门文章

  1. vue-cli脚手架build目录中check-versions.js的配置
  2. myelcipse中SVN进行代码更新和提交
  3. python处理时间相关的方法
  4. 物理机内存模型与java内存模型
  5. 自定义QSS
  6. Spring Boot JDBC 连接数据库
  7. [Android Studio系列(五)] Android Studio手动配置Gradle的方法
  8. 聊聊这两天在linux安装PHP7遇到的坑,真的是坑死人不偿命啊
  9. Linux嵌入式 -- 内核简介(x86)
  10. Valid Number,判断是否为合法数字