tips:
- kmod用1e9+7表示,几个0就e几
- 在主函数InversePairs中创建辅助数组,避免在每次merge中都新建数组,减少空间占用
class Solution {
public:
const int kmod = 1e9+7;
int count = 0;
int InversePairs(vector<int> data) {
int n = data.size();
if(n < 2)
return 0;
vector<int> tmp(n);
mergeSort(data,tmp,0,n-1);
return count;
}
void mergeSort(vector<int>& nums,vector<int>&tmp,int l,int r){
if(l >= r)
return;
int mid = l + ((r - l) >> 1);
mergeSort(nums, tmp, l, mid);
mergeSort(nums, tmp, mid+1, r);
merge(nums,tmp,mid,l,r);
}
void merge(vector<int>&nums,vector<int>&tmp,int mid,int left,int right){
int i = left;
int j = mid+1;
int idx = 0;
while(i<=mid && j<=right){
if(nums[i] > nums[j]){
tmp[idx++] = nums[j++];
count += (mid + 1 - i);
count %= kmod;
}
else
tmp[idx++] = nums[i++];
}
while(i<=mid)
tmp[idx++] = nums[i++];
while(j<=right)
tmp[idx++] = nums[j++];
for(idx = 0, i = left ; i <= right; i ++,idx++)
nums[i] = tmp[idx];
}
};

京公网安备 11010502036488号