//书上的方法:
class Solution {
public:
int InvertPairsNum(int* data, int* copy,int start, int end)
{
if(start==end){
copy[start]=data[start];
return 0;
}
int res = 0;
int length = (end-start)/2;
int left = InvertPairsNum(data,copy, start, start+length)%1000000007;
int right = InvertPairsNum(data,copy,start+length+1, end)%1000000007;
int i = start+length, j = end, count = 0;
int copyindex = end;
while(i>=start&&j>=start+length+1){
if(data[i]>data[j]){
copy[copyindex--]=data[i--];
count+=j-start-length;
if(count>=1000000007)
count%=1000000007;
}
else{
copy[copyindex--]=data[j--];
}
}
for(;i>=start;i--)
copy[copyindex--]=data[i];
for(;j>=start+length+1;j--)
copy[copyindex--]=data[j];
for(int k = start; k<=end; k++)
data[k] = copy[k];
return (count+left+right)%1000000007;
}
int InversePairs(vector<int> data) {
int len = data.size();
if(len<=0)
return 0;
int* copy = new int[len];
for(int i = 0 ;i< len; i++)
copy[i]=data[i];
int count = InvertPairsNum(&data[0],copy, 0, len-1);
delete[] copy;
return count;
}
};
数组中的逆序对
最新推荐文章于 2022-03-27 13:15:54 发布