剑指offer:数组中的逆序对
来源:互联网 发布:linux run文件是干嘛的 编辑:程序博客网 时间:2024/05/20 15:58
题目描述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
class Solution {public: int InversePairs(vector<int> data) { int len = data.size(); if (len == 0){ return 0; } vector<int> tmp(len); int res = mergeSort(data, tmp, 0, len - 1); return res; }private: int mergeSort(vector<int> &data, vector<int> &tmp, int left, int right){ if (left == right){ return 0; } int mid = left + (right - left) / 2; int leftCnt = mergeSort(data, tmp, left, mid); int rightCnt = mergeSort(data, tmp, mid + 1, right); int i = mid; int j = right; int tmpIndex = right; int cnt = 0; while (i >= left && j >= mid + 1){ if (data[i] > data[j]){ tmp[tmpIndex--] = data[i--]; //难点是怎么算cnt cnt += j - mid; } else{ tmp[tmpIndex--] = data[j--]; } } for (; i >= left; i--){ tmp[tmpIndex--] = data[i--]; } for (; j >= mid + 1; j--){ tmp[tmpIndex--] = data[j--]; } for (int i = left; i <= right; i++){ data[i] = tmp[i]; } return leftCnt + rightCnt + cnt; }};
1 0
- 【剑指offer】数组中的逆序对
- 剑指offer 36 数组中的逆序对
- 剑指offer--数组中的逆序对
- 剑指Offer之 - 数组中的逆序对
- 剑指offer之数组中的逆序对
- 剑指offer 36 - 数组中的逆序对
- 《剑指offer》数组中的逆序对
- 【剑指offer】数组中的逆序对
- 剑指offer—数组中的逆序对
- 【剑指offer】之数组中的逆序对
- 剑指offer:数组中的逆序对
- [剑指offer]数组中的逆序对
- 剑指offer:数组中的逆序对
- 剑指Offer--036-数组中的逆序对
- [剑指offer]数组中的逆序对
- 《剑指offer》:[36]数组中的逆序对
- 《剑指offer》-数组中的逆序对
- 数组中的逆序对(剑指offer)
- java中适配器模式
- QTqdebug输出 2016年4月28日
- 几道题
- iOS_根据文字字数动态确定Label宽高
- Redis事务使用总结
- 剑指offer:数组中的逆序对
- X86架构IO端口表
- PHP中列出目录中的目录和文件的几种方法
- Directive - Compile vs. Link
- 韩爷的梦(hash)
- 小马哥-----高仿红米note KM3 双版本刷机拆机主板图与开机识别图 6572机型 版本
- 详解zabbix安装部署(Server端篇)
- JSP 基础
- Android 组件Activity启动流程分析