zoukankan      html  css  js  c++  java
  • 【剑指offer35 数组中的逆序对】

    题目描述

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
     
     
    class Solution {
    
    public:
        int InversePairs(vector<int> data) {
            int length=data.size();
            if(length<=0)
                return 0;
           //vector<int> copy=new vector<int>[length];
           vector<int> copy;
           for(int i=0;i<length;i++)
               copy.push_back(data[i]); //复制一份
           long long count=InversePairsCore(data,copy,0,length-1);
           //delete[]copy;
           return count%1000000007;
        }
        
        long long InversePairsCore(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 long left=InversePairsCore(copy,data,start,start+length);
           long long right=InversePairsCore(copy,data,start+length+1,end); 
            
           int i=start+length; //指向左边的尾
           int j=end;
           int indexcopy=end;
           long long count=0;
           while(i>=start&&j>=start+length+1)
              {
                 if(data[i]>data[j])
                    {
                      copy[indexcopy--]=data[i--];
                      //右边此时指向位置的前面的都比data[i]小
                      count += j-start-length;          //count+= (j-(start+length+1))+1;
                    }
                 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;
        }
    };
  • 相关阅读:
    Enter passphrase
    laravel扩展包-私有库
    php7中异常
    laravel-admin(自定义表单视图)
    laravel-admin(自定义表单与验证)
    ZJU校赛划水记
    bzoj 4762: 最小集合
    WC2017 颓废记
    bzoj 2337: [HNOI2011]XOR和路径
    bzoj 2870: 最长道路tree
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13130247.html
Copyright © 2011-2022 走看看