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

数组中的逆序对

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

class Solution {
public:
    const int P = 1000000007;

    int merge(vector<int> &data, int l, int r){   //y总的归并排序
        if(l >= r) return 0;   //一个数  直接返回
        int mid = (l + r) >> 1;
        int res = merge(data, l, mid) + merge(data, mid + 1, r);  //两个子区间内部先找
        int i = l , j = mid + 1;
        vector<int> temp;   //记录当前大区间内部的归并结果
        while(i <= mid && j <= r){
            if(data[i] <= data[j]) temp.push_back(data[i ++]);
            else {
                temp.push_back(data[j ++]);
                res += mid - i + 1;     //两个字区间之间找,这两个子区间已经各自有序
                if(res >= P) res %= P;
            }
        }
        while(i <= mid) temp.push_back(data[i ++]);  //对于另一个没遍历完的子区间,直接排到后面
        while(j <= r) temp.push_back(data[j ++]);
        i = l;
        for(auto x : temp) data[i ++] = x;   //temp放回原来的归并序列,本次归并完成
        return res;
    }

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

全部评论

相关推荐

面试时长45分钟面完几个小时就显示终止了
MAGA让自动化再次...:评价是不如我电话约面后当晚终止
点赞 评论 收藏
分享
08-10 12:43
临沂大学 Java
等闲_:1,换一个模版,这个模版没有人会看的 2,项目太烂大街了,也太简单了,找AI优化一下描述,项目可以烂大街,但是简历不能烂大街,或者找项目换一下 3,如果没什么奖的话,把学校放到下面,添加一个个人描述,简单些,让简历丰富一些 4,改完之后海投试试,但是我真的很建议别走java了,可以试试前端
点赞 评论 收藏
分享
点赞 评论 收藏
分享
08-21 12:03
门头沟学院 Java
这到底要评估多久呀
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务