zoukankan      html  css  js  c++  java
  • 剑指offer--逆序对

    描述

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007
     
    思路:归并排序,元素移动的单位和就是逆序对的个数
     1 class Solution {
     2 public:
     3     int count=0,MAX=1000000007;
     4     // 采用归并排序,其交换次数就是逆序对的个数
     5     int InversePairs(vector<int> data) {
     6         sort(data,0,data.size()-1);
     7         return count;
     8     }
     9     
    10     vector<int> sort(vector<int>& init,int start,int end){
    11         if(start==end){return vector<int>(1,init[start]);}
    12         int mid=(start+end)/2;
    13         vector<int> a=sort(init,start,mid);
    14         vector<int> b=sort(init,mid+1,end);
    15         return merge(a,b);
    16     }
    17     
    18     vector<int> merge(vector<int> a,vector<int> b){
    19         vector<int> tmp;
    20         int i=0,j=0;
    21         while(i<a.size() && j<b.size()){
    22             if(a[i]<=b[j]){tmp.push_back(a[i++]);}
    23             else{tmp.push_back(b[j++]);count=(count+a.size()-i)%MAX; }
    24         }
    25         if(i==a.size()){   // 这个if和else if其实不需要
    26             while(j<b.size()){
    27                 tmp.push_back(b[j++]);
    28             }
    29         }else if(j==b.size()){
    30             while(i<a.size()){
    31                 tmp.push_back(a[i++]);
    32             }
    33         }
    34         return tmp;
    35     }
    36 };
    心之所愿,永不相忘
  • 相关阅读:
    VBA值列选取与复制,赋值
    Processing的条件式
    VBA之四给程序自动加行号
    自上而下的语法分析
    Processing绘制四边形
    Processing的代码编写流程
    Processing编程语言简介
    follow集的求解
    Processing函数与循环
    在UBUNTU下用ruby求得网卡地址IP地址和用户名
  • 原文地址:https://www.cnblogs.com/zgll/p/15393793.html
Copyright © 2011-2022 走看看