zoukankan      html  css  js  c++  java
  • 数组中的逆序对

    原文地址:https://www.jianshu.com/p/38433a114b90

    时间限制: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

  • 相关阅读:
    Python_数据类型与变量
    啦啦啦
    Java开发环境搭建
    TCP/IP 学习 --- 4(linux网络基础api)
    TCP/IP 学习 --- 3 (流量控制和拥塞控制)
    TCP/IP 学习 --- 2
    TCP/IP 学习记录 -- 1
    多线程
    如何解析xml文件
    Redis
  • 原文地址:https://www.cnblogs.com/cherrychenlee/p/10822286.html
Copyright © 2011-2022 走看看