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

数组中的逆序对

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

public class Solution {
    int count = 0;
    //归并排序
    public int InversePairs(int [] array) {
        sort(array,0,array.length-1);
        return count%1000000007;
    }
    public void sort(int[] array,int left,int right){
        if(left>=right){
            return;
        }
        int mid = left + (right - left)/2;
        sort(array,left,mid);
        sort(array,mid+1,right);
        merge(array,left,right);
        
    }
    public void merge(int[] array,int l,int r){
        int mid = l+(r-l)/2;
        int[] temp = new int[r-l+1];
        int i = l,j = mid+1;
        int k = 0;
        while(i <= mid && j <= r){
            if(array[i] < array[j]){
                temp[k++] = array[i++];
                count += j-mid-1;
                count %= 1000000007;    
            }else{
                temp[k++] = array[j++];
                
            }
        }
        while(i<=mid){
            temp[k++] = array[i++];
            count += j-mid-1;
            count %= 1000000007;
        }
        while(j<=r){
            temp[k++] = array[j++];
        }
        for(int m = 0;m<temp.length;m++){
            array[m+l] = temp[m];
        }
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务