题解 | #数组中的逆序对#

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

class Solution {
public:
    const int M = 1000000007;
    using LL =  long long;
    LL merge(vector<int>& nums, vector<int>& tmp, int l, int r) {
        if (l >= r) return 0;

        int m = (l + r) >> 1;
        LL res = merge(nums, tmp, l, m) + merge(nums, tmp, m + 1, r);
        // 归并
        int k = 0, i = l, j = m + 1;
        while (i <= m && j <= r) {
            if (nums[i] > nums[j]) {
                tmp[k++] = nums[j++];
                res += (m - i + 1);
                res %= M;
            } else {
                tmp[k++] = nums[i++];
            }
        }
        while (i <= m) tmp[k++] = nums[i++];
        while (j <= r) tmp[k++] = nums[j++];

        for (int i = l, j = 0; i <= r; i++, j++) nums[i] = tmp[j];

        return res;
    }

    int InversePairs(vector<int>& nums) {
        vector<int> tmp(nums.size());
        return merge(nums, tmp, 0, nums.size() - 1);
    }
};

全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务