题目
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。
概括:如果a[i] > a[j] 且 i < j, a[i] 和 a[j] 构成一个逆序对。
样例
序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。
算法如下:
/**
* @param A an array
* @return total of reverse pairs
*/
public long reversePairs(int[] A) {
// Write your code here
long result=0l;
int len=A.length;
//考虑两个极端情况(递减和递增)
boolean isOrder_r=true;//递减
boolean isOrder_l=true;//递增
for(int i=0;i<len-1;i++){
if(A[i]>=A[i+1]){
isOrder_l=false;//递增
break;
}
}
for(int i=0;i<len-1;i++){
if(A[i]<=A[i+1]){
isOrder_r=false;//递增
break;
}
}
if(isOrder_r){
// 如果为递减
return len*(len-1)/2;
}else if(isOrder_l){
// 如果为递增
return 0l;
}else{
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
if(A[i]>A[j]){
result++;
}
}
}
}
return result;
}