数组中的逆序对

 重新复制的数组应该在每次合并后都更新,剑指offer好像没有做。

class Solution {
public:
    int find(vector<int>&data,int begin,int end,vector<int> &res)
        {
        if(begin==end)
            return 0;
        int mid=(begin+end)/2;
        int left=find(data,begin,mid,res);
        int right=find(data,mid+1,end,res);
        int i=mid,j=end,num=0,k=end;
        while(i>=begin&&j>=mid+1)
            {
            while(i>=begin&&data[i]>data[j])
                {
                res[k--]=data[i--];
                num+=j-mid;
            }
                res[k--]=data[j--];
        }
        while(i>=begin)
           res[k--]=data[i--];
        while(j>=mid+1)
            res[k--]=data[j--];
        for(int i=0;i<data.size();i++)
            data[i]=res[i];
        return left+right+num;
    }
    int InversePairs(vector<int> data) {
        if(data.size()<2)return 0;
        vector<int> res(data.size(),0);
        for(int i=0;i<data.size();i++)
            res[i]=data[i];
        return find(data,0,data.size()-1,res);
    }
};

 

posted on 2016-04-13 12:19  RenewDo  阅读(139)  评论(0编辑  收藏  举报

导航