您的位置:首页 > 其它

LINTCODE——逆序对

2017-09-19 16:25 169 查看
LINTCODE——逆序对

思路:本来直接统计的,结果TIMEOUT,后来改用归并排序统计,通过了,就一个注意的,数组num分成L,mid,R三段时,如果L<=i<=mid ,mid+1 <= j <=R,此刻如果num[j] < num[i] ,那么对于J来说就有mid+i-1个逆序对;

class Solution {
private :
long long count = 0;
vector<int> num;

public:
/*
* @param A: an array
* @return: total of reverse pairs
*/

long long reversePairs(vector<int> &A) {
// write your code here

int R = A.size() - 1, L = 0 ;
num.resize(R+1,0);

sort(A , L , R );

return count;
}
void sort(vector<int> &A , int L ,int R )
{
if(R <= L)
return;

int mid = (L+R)>>1;
sort(A,L,mid);
sort(A,mid+1,R);

merge(A,L,mid ,R);

}
void merge(vector<int> &A , int L ,int mid ,int R )
{
for(int x = L ; x <= R ; x++)
num[x] = A[x] ;

for(int k = L ,i = L ,j = mid+1; k <= R ; k++ )
{
if( i > mid)
A[k] = num[j++];
else if(j > R)
A[k] = num[i++];
else if(num[j] < num[i])
{
A[k] = num[j++];
count += (mid - i + 1);

}
else
A[k] = num[i++];

}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: