美文网首页
数组中的逆序对

数组中的逆序对

作者: su945 | 来源:发表于2020-05-14 21:55 被阅读0次

题目描述

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

问题分析

//思路1暴力解决
//思路2利用归并排序
参考:https://www.nowcoder.com/questionTerminal/96bd6684e04a44eb80e6a68efc0ec6c5?f=discussion

解题思路1

class Solution {
public:
    long countInversePairs(vector<int> &data,vector<int> &copy,int start,int end)
    {
        if (start == end)
        {
            copy[start] = data[start];
            return 0;
        }
        //
        int length = (end-start)/2;
        long left = countInversePairs(copy,data,start,start+length);
        long right = countInversePairs(copy,data,start+length+1,end);
        int i = start+length;
        int j = end;
        int indexCopy = end;
        long count = 0;
        while(i >= start && j >= (start+length+1))
        {
            //逆序对出现
            if (data[i] > data[j])
            {
                copy[indexCopy--] = data[i--];
                //统计方式需要分析
                count = count + j - start-length;
            } else
            {
                copy[indexCopy--] = data[j--];
            }
        }

        for( ; i >= start; i--)
        {
            copy[indexCopy--] = data[i];
        }

        for( ; j >= (start+length+1); j--)
        {
            copy[indexCopy--] = data[j];
        }

        return left+right+count ;

    }


    int InversePairs(vector<int> data) {
        if(data.empty())
        {
            return 0;
        }

        //copy 一个同样大小的数组
        vector<int> copy(data);

        long count = countInversePairs(copy,data,0,data.size()-1);
        return count%1000000007;
    }
};

相关文章

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

    题目: 题目的理解: 取每一个数与后面的每一个数比较,如果大于后面的数则计数加1. 遍历完成后返回计数。 用了二分...

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

    时间限制:2秒 空间限制:32768K 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字...

网友评论

      本文标题:数组中的逆序对

      本文链接:https://www.haomeiwen.com/subject/qhcfohtx.html