数组中的逆序对

来源:互联网 发布:阿里云设置伪静态 编辑:程序博客网 时间:2024/06/04 19:14
//书上的方法:class Solution {public:    int InvertPairsNum(int* data, int* copy,int start, int end)    {        if(start==end){        copy[start]=data[start];            return 0;        }        int res = 0;        int length = (end-start)/2;        int left = InvertPairsNum(data,copy, start, start+length)%1000000007;        int right = InvertPairsNum(data,copy,start+length+1, end)%1000000007;        int i = start+length, j = end, count = 0;        int copyindex = end;        while(i>=start&&j>=start+length+1){            if(data[i]>data[j]){            copy[copyindex--]=data[i--];                count+=j-start-length;                if(count>=1000000007)                    count%=1000000007;                            }            else{            copy[copyindex--]=data[j--];            }                    }        for(;i>=start;i--)        copy[copyindex--]=data[i];        for(;j>=start+length+1;j--)        copy[copyindex--]=data[j];        for(int k = start; k<=end; k++)            data[k] = copy[k];               return (count+left+right)%1000000007;    }    int InversePairs(vector<int> data) {        int len = data.size();        if(len<=0)            return 0;        int* copy = new int[len];        for(int i = 0 ;i< len; i++)        copy[i]=data[i];        int count = InvertPairsNum(&data[0],copy, 0, len-1);        delete[] copy;                return count;    }};

原创粉丝点击