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

数组中的逆序对

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);
    }
};

全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务