数组中的逆序对(剑指offer)

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

public class Solution {
    public int InversePairs(int [] array) {
        if(array==null|array.length==0) return 0;
        int[] ret=new int[array.length];
        ret[0]=-1;
        for(int i=1;i<array.length;i++){
            int j=i-1;
            while(j>=0&&array[j]<array[i]) j--;
            if(j<0) ret[i]=-1;
            else ret[i]=j;
        }
        int count=0;

        for(int i=1;i<array.length;i++){
            int j=ret[i];
            while(j!=-1){
                if(ret[j]!=-1&&array[j]!=array[ret[j]])
                count++;        
                j=ret[j];    
                if(j==-1) count++;
           }

        }
        return count;
    }
}
点赞