1. 程式人生 > 資訊 >刺殺小說家+侍神令+哪吒重生:影票通通20元!

刺殺小說家+侍神令+哪吒重生:影票通通20元!

在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數。

示例 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]))

bibili講解:https://space.bilibili.com/390775036/channel/detail?cid=123574