剑指offer 数组中的逆序对(归并排序)

剑指 Offer 51. 数组中的逆序对

难度困难176

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

 

示例 1:

输入: [7,5,6,4]
输出: 5

解题思路:

统计逆序对时候,答案的贡献以左半部分为基准。

class Solution {
public:
    vector arrmv;
    int ans;
    void merge_sort(int l,int r){
        if(l>=r)return;
        int m = l+(r-l)/2;
        merge_sort(l,m);
        merge_sort(m+1,r);
        queue q;
        int lpoi=l;
        int rpoi=m+1;
        while(lpoi<=m && rpoi<=r){
            while(lpoi<=m && arrmv[lpoi]<=arrmv[rpoi])q.push(arrmv[lpoi++]),ans+=(rpoi-(m+1));
           while(lpoi<=m && rpoi<=r && arrmv[rpoi]& nums) {
        ans=0;
        arrmv=nums;
        merge_sort(0,(int)arrmv.size()-1);
        return ans;
    }
};

 

你可能感兴趣的:(归并排序,leetcode)