美文网首页
数组的逆序对

数组的逆序对

作者: shuixingge | 来源:发表于2016-04-29 20:36 被阅读20次

思路:归并排序
每次把数组从中间拆分成两部分,先统计拆分数组内部的逆序对,再把这个数组排序,防止统计重复,最后再把拆分的数组合并,并统计合并过程中的逆序对。

Paste_Image.png Paste_Image.png
 public int InversePairs(int [] array) {
           if(array==null||array.length==0)
                      return 0;
           int[] copy = new int[array.length];
        for (int i = 0; i < copy.length; i++) {
            copy[i] = array[i];
        }
        int count = InversePairsHelper(array, copy, 0, array.length - 1);
        return count;
 }
 public int InversePairsHelper(int [] array,int [] copy,int start,int end) {
         if(start==end){
             copy[end]=array[end];
             return 0;
         }
         int len=(end-start)/2;//
         int left=InversePairsHelper(array,copy,start,start+len);
         int right=InversePairsHelper(array,copy,start+len+1,end);
         int i=start+len;
         int j=end;
         int indexofCopy=end;
          
         while(i>=start&&j>start+len+1){
                if(array[i]>array[j]){
                     copy[indexofCopy--]=array[i--];
                     count+=j-start-len;
                }else{
                   copy[indexofCopy--]=array[j--];
                }
         }
            for(;i>=start;i--){
                     copy[indexofCopy--]=array[i--];
            }
            for(;j>=start+len+1;j--){
                 copy[indexofCopy--]=array[i--];
            }
       return left+right+count;
 }

相关文章

  • 数组的逆序对

    思路:归并排序每次把数组从中间拆分成两部分,先统计拆分数组内部的逆序对,再把这个数组排序,防止统计重复,最后再把拆...

  • Java 数组的排序、逆序

    数组的排序、逆序测试数据 数组选择排序 数组冒泡排序 数组逆序

  • 逆序对 树状数组

    求逆序对除了有merge sort,还可以用树状数组比如输入数组为a,维护的树状数组为c,插入的时候,人为是c[a...

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

    题目: 题目的理解: 取每一个数与后面的每一个数比较,如果大于后面的数则计数加1. 遍历完成后返回计数。 用了二分...

网友评论

      本文标题:数组的逆序对

      本文链接:https://www.haomeiwen.com/subject/ndckrttx.html