数组中的逆序对

题目:

  数组中的逆序对

题目描述:

  在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

解题:

class Solution {
public:
    int InversePairs(vector<int> data) {
        return mergeSort(data, 0, data.size() - 1);
    }
private:
    long long mergeSort(vector<int> &data, int s, int e) {
        if (s >= e) return 0;
        int mid = (e - s) / 2 + s;
        long long num = mergeSort(data, s, mid) + mergeSort(data, mid + 1, e);
        int i = s, j = mid + 1;
        int cnt = 0;
        vector<int> tmp;
        while (i <= mid || j <= e) {
            if (i > mid) {
                tmp.push_back(data[j++]);
            }
            else if (j > e) {
                num += cnt;
                tmp.push_back(data[i++]);
            }
            else if (data[i] > data[j]) {
                cnt++;
                tmp.push_back(data[j++]);
            }
            else {
                num += cnt;
                tmp.push_back(data[i++]);
            }
        }
        for (int i = s; i <= e; ++i) {
            data[i] = tmp[i - s];
        }
        return num%1000000007;
    }
};

系列:


打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦