题解 | #数组中的逆序对#

数组中的逆序对

http://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

归并排序解决

public class Solution {
    int count =0;
    public int InversePairs(int [] array) {
        if(array.length==0){
            return 0;
        }
        mergeSort(array,0,array.length-1);
        return count;
    }
    public void mergeSort(int [] array,int start,int end){
        if(start>=end){
            return;
        }
        int mid=(start+end)/2;
        mergeSort(array,start,mid);
        mergeSort(array,mid+1,end);
        merge(array,start,mid,end);
    }
    
    public void merge(int [] array,int start,int mid,int end){
        int left=start;
        int right=end;
        int m=mid+1;
        int [] temp=new int[end-start+1];
        int index=0;
        while(left<=mid&&m<=end){
          //如果出现逆序对,那么他后边的必定也构成逆序对
            if(array[left]>array[m]){
                temp[index]=array[m];
                count=(count+(mid-left+1))%1000000007;
                m++;
                index++;
                
            }
            else {
                temp[index]=array[left];
                left++;
                index++;
            } 
        }
        while(left<=mid){
            temp[index]=array[left];
            left++;
            index++;
        }
        while(m<=end){
            temp[index]=array[m];
            m++;
            index++;
        }
        for(int i=start;i<=end;i++){
            array[i]=temp[i-start];
        }
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务