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

数组中的逆序对

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

public class Solution {
    /*
      解题思路:
        借助归并排序的方法,在子问题进行合并的时候统计逆序对的个数
     */
    public int InversePairs(int [] array) {
        int len = array.length;
        if (len == 0) return 0;
        // 分治法
        int[] temp = new int[len];
        return mergeSort(array, 0, len - 1, temp);
    }
    // 分治排序
    private int mergeSort(int[] arr, int left, int right, int[] temp) {
        // 二分法
        if (left >= right) return 0;
        int mid = (left + right) / 2;
        int res = mergeSort(arr, left, mid, temp) + mergeSort(arr, mid + 1, right,
                  temp);
        // 取模运算
        final int mod = 1000000007;
        res %= mod;
        // 合并排序
        int i = left;
        int j = mid + 1;
        int index = 0;
        while (i <= mid && j <= right) {
            if (arr[i] <= arr[j]) temp[index++] = arr[i++];
            else {
                temp[index++] = arr[j++];
                res += mid - i + 1; // 统计逆序对
            }
        }
        while (i <= mid) temp[index++] = arr[i++];
        while (j <= right) temp[index++] = arr[j++];
        if (right - left + 1 >= 0)
            System.arraycopy(temp, 0, arr, left, right - left + 1);
        return res % mod;
    }
}

全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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