0
点赞
收藏
分享

微信扫一扫

2022.03.02 - NC017.BM20 数组中的逆序对

小安子啊 2022-03-11 阅读 22
算法

文章目录

1. 题目

在这里插入图片描述

2. 思路

(1) 归并排序

  • 左右两数组归并时,若右边数组的元素能排在前面,则统计左边数组中尚未进行排序的元素即可。

3. 代码

public class Test {
    public static void main(String[] args) {
    }
}

class Solution {
    public int[] array;
    public int count;

    public int InversePairs(int[] array) {

        this.array = array;
        count = 0;
        merge(0, array.length - 1);
        return count;
    }

    public int[] merge(int left, int right) {
        if (left == right) {
            return new int[]{array[left]};
        }
        int mid = left + ((right - left) >> 1);
        int[] leftArray = merge(left, mid);
        int[] rightArray = merge(mid + 1, right);
        int[] mergeArray = new int[right - left + 1];
        int l = 0;
        int r = 0;
        for (int i = 0; i < mergeArray.length; i++) {
            if (l == leftArray.length) {
                mergeArray[i] = rightArray[r];
                r++;
            } else if (r == rightArray.length) {
                mergeArray[i] = leftArray[l];
                l++;
            } else if (leftArray[l] <= rightArray[r]) {
                mergeArray[i] = leftArray[l];
                l++;
            } else {
                mergeArray[i] = rightArray[r];
                r++;
                count += leftArray.length - l;
                count %= 1000000007;
            }
        }
        return mergeArray;
    }
}
举报

相关推荐

0 条评论