归并排序加上辅助数组,双指针快速统计并合并相邻有序数组的元素
#include <functional>
#include <vector>
const int BASE=1000000007;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int InversePairs(vector<int>& nums) {
// write code here
int n=nums.size(),result=0;
vector<int> tmp(n);
function<void(int,int)> merge_sort =[&](int start,int end)
{
if(start>=end)return;
int mid=(end+start)/2;
merge_sort(start,mid);
merge_sort(mid+1,end);
int i=start,j=mid+1,k=start;
while(i<=mid&&j<=end)
{
if(nums[i]<=nums[j])
{
tmp[k++]=nums[i++];
}
else {
result=(result+mid-i+1)%BASE;
tmp[k++]=nums[j++];
}
}
while(i<=mid)tmp[k++]=nums[i++];
while(j<=end)tmp[k++]=nums[j++];
for(int left=start;left<=end;++left)
nums[left]=tmp[left];
};
merge_sort(0,n-1);
return result;
}
};

京公网安备 11010502036488号