题解 | #归并——数组中的逆序对#
数组中的逆序对
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5
#include <vector> class Solution { public: void merge_sort(vector<int>& data,int l,int r,int &ans){ if(l>=r){ return; } int mid = (l+r)/2; merge_sort(data,l,mid,ans); merge_sort(data,mid+1,r,ans); int i = l,j=mid+1,k=0; vector<int> temp(r-l+1); while (i<=mid && j<=r) { if(data[i] <= data[j]){ temp[k++] = data[i++]; }else { ans +=(mid - i+1); ans = ans%1000000007; temp[k++] = data[j++]; } } while (i<=mid) { temp[k++] = data[i++]; } while (j<=r) { temp[k++] = data[j++]; } i = l;k = 0; while (l<=r) { data[l++] = temp[k++]; } return; } int InversePairs(vector<int> data) { int ans = 0; int n = data.size(); if(n < 2) return ans; merge_sort(data, 0, n-1, ans); return ans; } };