陣列中逆序的對數
阿新 • • 發佈:2019-01-05
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]; } } };