在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4] 输出: 5
限制:
0 <= 数组长度 <= 50000
使用归并排序完成
/** * @param {number[]} nums * @return {number} */ var reversePairs = function (nums) { let res = 0; var mergeSort = function (nums) { if (nums.length <= 1) { return nums } let mid = Math.floor(nums.length / 2); // console.log(mid) let leftarr = nums.slice(0, mid); let rightrr = nums.slice(mid); return merge(mergeSort(leftarr), mergeSort(rightrr)) function merge(left, right) { let result = []; while (left.length > 0 && right.length > 0) { if (left[0] > right[0]) { res += left.length result.push(right.shift()); } else { result.push(left.shift()); } } /* 当左右数组长度不等.将比较完后剩下的数组项链接起来即可 */ return result.concat(left).concat(right); } }; mergeSort(nums) return res } console.log(reversePairs([1, 3, 2, 3, 1]))