码迷,mamicode.com
首页 > 编程语言 > 详细

数组中的逆序对

时间:2016-06-24 15:27:53      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

题目

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

解题

方法一:暴力

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

方法二:归并排序

public class Solution {
    public int InversePairs(int [] array) {
         if(array.length<=0)
             return 0;
         return mergeSort(array,0,array.length-1);
     }
     public int  mergeSort(int[] array,int l,int r){
         if(l>=r){
             return 0;
         }
         int mid=(l+r)/2;
         int lnums=mergeSort(array,l,mid);
         int rnums=mergeSort(array,mid+1,r);
        return  lnums+rnums+merge(array,l,mid,r);
     }
     public int merge(int[] array,int l,int mid,int r){
        int [] temp = new int[r-l+1];

        int count=0;
        int i=l;
        int j=mid+1;
        int t=0;
        while(i<=mid && j<=r){

            if(array[i]>array[j]){ // 说明:i - mid 内的数都大于 array[j]
                temp[t++]=array[j];
                count+=mid-i+1; // 计算逆序对个数
                j++;
            }else {
                temp[t++]=array[i];
                i++;
            }
        }
        // 剩余的数补上去 
        // i越界了 增加 j
        while(i>mid&&j<=r){
             temp[t++]=array[j];
             j++;
        }
         // j越界了 增加 i
        while(i<=mid&&j>r){
            temp[t++]=array[i];
            i++;
        }
        // 利用temp数组更新array数组 
        for(i=l;i<=r;i++){
            array[i]=temp[i-l];
        }
        return count;
     }
}

数组中的逆序对

标签:

原文地址:http://blog.csdn.net/qunxingvip/article/details/51746978

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!