题解:给定一个数组,求其中的逆序对数
逆序对定义:i < j && nums[i] > nums[j]
传送门
题解:利用归并排序
int reversePairs(vector<int>& nums) {
vector<int> tmp(nums.size());
function<int(int,int)> mergeSort = [&](int l, int r) {
if (l >= r) return 0;
int m = (l + r) / 2;
int res = mergeSort(l, m) + mergeSort(m+1, r);
for (int k = l; k <= r; k++)
tmp[k] = nums[k];
int i = l, j = m+1, k = l;
while (i <= m && j <= r) {
if (tmp[i] <= tmp[j]) nums[k++] = tmp[i++];
else {
nums[k++] = tmp[j++];
res += m-i+1;
}
}
while (i <= m) nums[k++] = tmp[i++];
while (j <= r) nums[k++] = tmp[j++];
return res;
};
return mergeSort(0, nums.size()-1);
}