数组中的逆序对

作者: cherryleechen | 来源:发表于2019-05-06 21:37 被阅读0次

时间限制:2秒 空间限制:32768K

题目描述

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

输入描述:

题目保证输入的数组中没有的相同的数字。
数据范围:
对于%50的数据,size<=10^4
对于%75的数据,size<=10^5
对于%100的数据,size<=2*10^5

输入

1,2,3,4,5,6,7,0

输出

7

我的代码

class Solution {
public:
    int InversePairs(vector<int> data) {
        if(data.size()<2)
            return 0;
        vector<int> data_copy(data.size(),0);//辅助数组
        return InversePairsCore(data,data_copy,0,data.size()-1);
    }
    //归并思想
    int InversePairsCore(vector<int> &arr,vector<int> &arr_,
                        int begin, int end){
        if(begin==end){
            arr_[begin]=arr[begin];
            return 0;
        }
        int len=(end-begin)/2;
        int left=InversePairsCore(arr,arr_,begin,begin+len);
        int right=InversePairsCore(arr,arr_,begin+len+1,end);
        int i=begin+len,j=end,k=end;
        int count=0;
        while((i>=begin)&&(j>begin+len)){
            if(arr[i]>arr[j]){
                arr_[k--]=arr[i--];
                count+=j-begin-len;
                if(count>1000000007)
                    count%=1000000007;
            }
            else
                arr_[k--]=arr[j--];
        }
        while(i>=begin)
            arr_[k--]=arr[i--];
        while(j>begin+len)
            arr_[k--]=arr[j--];
        for(int i=begin;i<=end;i++)
            arr[i]=arr_[i];
        return (left+right+count)%1000000007;
    }
};

运行时间:107ms
占用内存:4444k

相关文章

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

  • 数组中的逆序对

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

网友评论

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

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