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;
        }
    };
  • 相关阅读:
    根据地球上两个坐标点,计算出距离
    判断一个日期距离今天是不是过了指定的天数
    二维码
    修改、删除 触发器
    sql server 数据加密
    C#下载apk文件
    java 判断一个字符串是否包含某个字符串中的字符
    CenterOS 设置静态IP
    VMware 克隆 CenterOS 虚拟机
    VMware 安装CenterOS
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13130247.html
Copyright © 2011-2022 走看看