51、数组中的逆序对

思路:
利用归并排序的思想,先对前一半数组统计逆序对后从小到大排序,再对后一半数组统计逆序对后排序,再统计前后两个数组之间的逆序对。用空间换时间。


import java.util.Arrays;
public class Solution {
    public int InversePairs(int [] array) {
        if((array==null) ||(array.length<=1)) return 0;
        return f(array,0,array.length);
    }
    public int f(int[] array,int start,int end)
    {
        int sum = 0;
        if((end-start)==1) return 0;
        if(end>start){
        sum =(f(array,start,((end-start)>>1)+start)%1000000007)+(f(array,((end-start)>>1)+start,end)%1000000007);
        }
        Arrays.sort(array,start,((end-start)>>1)+start);
        Arrays.sort(array,((end-start)>>1)+start,end);
        int p1 = start;
        int p2 = ((end-start)>>1)+start;
        int crease = 0;
        while((p1!=((end-start)>>1)+start)&&(p2!=end))
        {
            if(array[p1]<=array[p2])
                p1++;
            else
            {
                crease = crease+((end-start)>>1)+start-p1;
                p2++;
                if(crease>=1000000007) crease%=1000000007;
            }
        }
        sum = sum+crease;
        return sum%1000000007;
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongdileidechouzhu/article/details/79957715
个人分类: 剑指offer
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭