数组中逆序的对数

class Solution {
public:
    int InversePairs(vector<int> data) {
        
        if(data.size()<=1){
            return 0;
            
        }
        
        cnt=0;
        mergesort(data,0,data.size()-1);
        
        return cnt;
    }
    long long  cnt;
    
    void mergesort(vector<int> &data,int l,int r){
        if(l>=r){
            return ;
        }
        int mid=(l+r)/2;
        
        mergesort(data,l,mid);
        mergesort(data,mid+1,r);
        mergearray(data,l,mid,r);
    }
    void mergearray(vector<int> &data,int l,int mid,int r){
        int i=l;
        int j=mid+1;
        
        vector<int> temp(r-l+1,0);
        int k=0;
        while(i<=mid&&j<=r){
            if(data[i]<=data[j]){
                temp[k++]=data[i++];
            }else{
                temp[k++]=data[j++]; // 456  123   因为123后面是有序的 这个的话 它的个数就是 mid-i+1
                cnt+=mid-i+1;
                cnt%=1000000007;   // 其实就是归并排序    记得要取摸
            }
        }
        
        while(i<=mid){
            temp[k++]=data[i++];
        }
        while(j<=r){
            temp[k++]=data[j++];
        }
        
        for(k=0;k<temp.size();k++){
            data[l+k]=temp[k];
        }
    }
};

猜你喜欢

转载自blog.csdn.net/u010325193/article/details/85849049