数组中的逆序对
重新复制的数组应该在每次合并后都更新,剑指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); } };