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

数组中的逆序对

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

class Solution {
private:
int kmod = 1000000007;

public:
    int InversePairs(vector<int> data) {
        if(data.size() == 0 || data.size() == 1) return 0;
        int l = 0,r = data.size() - 1,mid = (r - l) >> 1; 
        vector<int> kmp(data.size(),0);
        int res = 0;
        Sort(data,kmp,l,r,res);
        return res;
    }

    void Sort(vector<int>& arr,vector<int>& kmp,int l,int r,int &res){
        if(l >= r) return;
        int mid = l + ((r - l) >> 1);
        Sort(arr,kmp,l,mid,res);
        Sort(arr,kmp,mid + 1,r,res);
        Merge(arr,kmp,l,mid,r,res);
    }

    void Merge(vector<int>& arr,vector<int>& kmp,int l,int mid, int r,int &res){
        int i = l,j = mid + 1,k = l;
        while(i <= mid && j <= r){
            if(arr[i] > arr[j]){
                kmp[k ++] = arr[j ++];
                res += (mid - i + 1);
                res %= kmod;
            }
            else {
                kmp[k ++] = arr[i ++];
            }
        }

        while(i <= mid){
            kmp[k ++] = arr[i ++];
        }
        while(j <= r){
            kmp[k ++] = arr[j ++];
        }
        for(int m = l;m <= r;m ++){
            arr[m] = kmp[m];
        }
    }

};

跟着题解手打一遍归并排序,自己再打一遍。

全部评论

相关推荐

07-15 12:15
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 12:23
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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