• 【剑指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;
        }
    };
  • 相关阅读:
    如何判断哪个方法调用了相同的事件?
    Windows Update问题
    Android学习笔记
    关于官方Reachability Demo理解
    poj 1797 Heavy Transportation
    poj 3013 Big Christmas Tree
    poj 1062 昂贵的聘礼
    poj 3615 Cow Hurdles(floyd)
    CF Planets(STL+ 最短路)
    poj 3026 Borg Maze
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13130247.html
Copyright © 2020-2023  润新知