在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。力扣原文
示例 1:
输入: [7,5,6,4]
输出: 5
解题:
var reversePairs = function (nums) {
let temps = new Array(nums.length).fill(0);
const sort = (left, right) => {
if (left >= right) return 0;
let ans = 0;
let mid = (left + right) >> 1;
ans += sort(left, mid);
ans += sort(mid + 1, right);
let k = left,
p1 = left,
p2 = mid + 1;
while (p1 <= mid || p1 <= right) {
if (p2 > right || (p1 <= mid && nums[p1] <= nums[p2])) {
temps[k++] = nums[p1++];
} else {
temps[k++] = nums[p2++];
ans += mid - p1 + 1;
}
}
for (let i = 0; i <= right; i++) nums[i] = temps[i];
return ans;
};
return sort(0, nums.length - 1);
};