码迷,mamicode.com
首页 > 编程语言 > 详细

【剑指offer35 数组中的逆序对】

时间:2020-06-15 14:22:46      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:int   public   core   ret   tar   剑指offer   start   大于   art   

题目描述

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数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;
    }
};

 

【剑指offer35 数组中的逆序对】

标签:int   public   core   ret   tar   剑指offer   start   大于   art   

原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13130247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!