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 };
    心之所愿,永不相忘
  • 相关阅读:
    【转】HEIF图片存储格式探秘
    【转】Maven项目中将配置文件打包到jar包中
    C++ 单词接龙
    vector vector int 初始化
    哈夫曼树的特点
    哈夫曼树的构造
    单链表的逆转(测试数据)
    单链表的逆转
    二叉搜索树的插入
    二叉搜索数的应用
  • 原文地址:https://www.cnblogs.com/zgll/p/15393793.html
Copyright © 2011-2022 走看看