剑指offer面试题36:数组中的逆序对
2016-07-25 16:18
393 查看
#include "iostream" using namespace std; int InversePairsCore(int* data,int* copy,int start,int end) { if (start==end) { copy[start] = data[start]; return 0; } int length = (end - start) / 2; int left = InversePairsCore(copy, data, start, start + length); int right = InversePairsCore(copy, data, start + length + 1, end); int i = start + length; int j = end; int indexCopy = end; int count = 0; while (i>=start&&j>=start+length+1) { if (data[i]>data[j]) { copy[indexCopy--] = data[i--]; count += j - start - length; } else { copy[indexCopy--] = data[j--]; } } for (; i >= start; --i) copy[indexCopy--] = data[i]; for (; j >=start + length + 1; --j) copy[indexCopy--] = data[j]; return left + right + count; } int InversePairs(int* data, int length) { if (data == NULL || length < 0) return 0; int *copy = new int[length]; for (int i = 0; i < length; i++) copy[i] = data[i]; int count = InversePairsCore(data, copy, 0, length - 1); delete[] copy; return count; } int main() { int a[] = { 7, 5, 6, 4 }; cout << InversePairs(a, 4); system("pause"); return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- Lua中调用C++函数示例
- 详解Lua中的数组概念知识
- Lua教程(一):在C++中嵌入Lua脚本
- Perl中的列表和数组学习笔记
- Lua教程(二):C++和Lua相互传递数据示例
- 一道sql面试题附答案
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧