逆序对(reverse-pair)

思想和归并排序的思想一样,时间复杂度是O(nlgn)。 就是在统计逆序对个数的表达式需要注意一下。

具体实现

#include <iostream>
#include <vector>
#include <cmath> using namespace std; class Solution {
public:
//逆序对算法
int reverse_pair(vector<int>& vec, int p, int r) {
if (p < r) {
int q = floor((r + p) / 2);
reverse_pair(vec, p, q); //划分子问题
reverse_pair(vec, q + 1, r);
total_result += merge(vec, p, q, r); //合并
}
}
int merge(vector<int>& vec, int p, int q, int r) {
vector<int> vec1(vec.begin() + p, vec.begin() + q + 1);
vector<int> vec2(vec.begin() + q + 1, vec.begin() + r + 1);
vec1.push_back(INT_MAX);
vec2.push_back(INT_MAX);
int i = 0;
int j = 0; int result = 0;
for (int k = p; k <= r; k++) {
if (vec1[i] < vec2[j]) {
vec[k] = vec1[i];
i++;
} else {
vec[k] = vec2[j];
j++;
result += (q - i + 1 - p); // 这个表达式非常重要
}
} return result;
}
int get_result() {
return total_result;
}
private:
int total_result;
};
int main() {
int arr[] = {2, 3, 8, 6, 1};
vector<int> vec(arr, arr+5);
Solution* solution = new Solution();
solution->reverse_pair(vec, 0, 4);
cout << solution->get_result() << endl;
return 0;
}

最新文章

  1. 1Z0-053 争议题目解析688
  2. 部分MP4在谷歌浏览器上无法播放
  3. 在VMware Workstation11虚拟机上安装黑苹果
  4. Java实现Tire
  5. 继承Animation
  6. poj 3321 Apple Tree(一维树状数组)
  7. MYSQL仅仅向某个字段进行插入
  8. Intention Locks 意向锁
  9. Java集合框架Collections【List/Set】
  10. webpack安装教程及实例
  11. java 集合类基础问题汇总
  12. MySQL中, 如何查询某一天, 某一月, 某一年的数据.
  13. does not support SSL connections
  14. [官网]Red Hat Enterprise Linux Release Dates
  15. 用IBM MQ中间件开发碰到的MQRC_NOT_AUTHORIZED(2035)问题
  16. 安全测试6_Web安全工具第三节(Web安全工具)
  17. Git初用心得
  18. 小学四则运算练习(JAVA编写)
  19. PHP做文件限速下载
  20. LOJ2321. 「清华集训 2017」无限之环【费用流】

热门文章

  1. 【Cygwin】Windows下使用linux命令
  2. FZU1465
  3. 160728、Spark Streaming kafka 实现数据零丢失的几种方式
  4. 【IE兼容性】代码中多语言样式+IE不兼容解决
  5. Python IDLE或shell中切换路径
  6. MyEclipse中手工添加dtd支持
  7. nodemailer发送邮件各个服务器接口
  8. Golang Frameworks
  9. 用户登陆状态,ios开发用户登陆
  10. 一段能瞬间秒杀所有版本IE的简单HTML代码