索引请参考:系列目录
题目:
- 在数组中的2个数字,如多前面的一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数字,求出这个数组中给逆序对的个数总数。
- 示例:
- 输入{7,5,6,4}
- 输出:5 分别时 (7,6)、(7,5)、(7,4)、(6,5)、(6,4)、(5,4)
分析:
- 就目前数组知识来说,只能采取暴力法。
- 将数组从大到小进行排序
- 将排序后的数组两两组合
int inversePair(std::vector<int> & data) {
//1.排序
auto cmp = [](int a,int b) {
return a > b;
};
std::sort(data.begin(), data.end(), cmp);
//2.两两排序
int size = data.size();
int ret = 0;
for (int i = 0; i < size; i++)
for (int j = i + 1; j < size; j++)
++ret;
return ret;
}
评注:该算法的时间复杂度为o(n^2),时间复杂度过大。等更到排序算法时候,会再次更次年本文,利用归并排序的算法,时间复杂度降到了O(NlogN)。