求数组中的逆序对,要求时间复杂度为O(nlogn),空间复杂度O(n)题目如下:(注:原题来自力扣的剑指 Offer 51. 数组中的逆序对)
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4]
输出: 5
思路分析:
1.如果不考虑时间复杂度限制,则可以考虑暴力解法,即用双层循环即可遍历整个数组完成逆序对统计。
int reversePairs(vector<int>& nums) {
int count = 0;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if (nums[j] < nums[i])
++count;
}
}
return count;
}
由于双层循环时间复杂度为O(n^2