【剑指offer】【归并】51. 数组中的逆序对

题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/

归并排序

class Solution {
public:
    int merge(vector<int>& nums, int l, int r)
    {
        if(l >= r) return 0;
        int mid = (l + r) >> 1;
        int res = merge(nums, l, mid) + merge(nums, mid + 1, r);
        int i = l, j = mid + 1;
        vector<int> temp;
        while(i <= mid && j <= r)
            if(nums[i] <= nums[j]) temp.push_back(nums[i++]);
            else{
                temp.push_back(nums[j++]);
                res += mid - i + 1;
            }
        while(i <= mid) temp.push_back(nums[i++]);
        while(j <= r) temp.push_back(nums[j++]);
        i = l;
        for(auto x : temp) nums[i++] = x;
        return res;
    }
    int reversePairs(vector<int>& nums) {
        return merge(nums, 0, nums.size() - 1);
    }
};
posted @ 2020-05-04 15:01  NaughtyCoder  阅读(90)  评论(0)    收藏  举报