题目描述

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

解题思路

  1. 暴力超时
class Solution {
public:int InversePairs(vector<int> data) {if(data.size()<=1) return 0;int cnt=0;for(int i=0; i<data.size(); i++){for(int j=i+1; j<data.size(); j++){if(data[j]<data[i]) cnt++;}}return cnt%1000000007;}
};

剑指offer的解法:

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--];count=count+j-start-length;          //count=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;}
};

剑指offer:数组中的逆序对相关推荐

  1. 剑指offer 数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  2. 剑指Offer_35_数组中的逆序对

    题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...

  3. 2021-09-03剑指Offer51.数组中的逆序对

    class Solution {int[] nums, tmp;//表示未分配长度的数组指针?//java的默认权限是共有还是私有?public int reversePairs(int[] nums ...

  4. 剑指offer 数组中的逆数对

    链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...

  5. 剑指offer35——数组中的逆数对

    题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 一种直观的思路是通过暴力破解的方法,时间复杂度为O(N*N).除此以 ...

  6. 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  7. 剑指offer:数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  8. [剑指offer] 数组中只出现一次的数字

    本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...

  9. python剑指offer数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  10. 【排序】剑指offer:数组中重复的数字

    对数组进行排序,然后遍历判断,如果两个数相等,那么这两个数一定相邻 代码: class Solution { public:int duplicate(vector<int>& n ...

最新文章

  1. CSS 文字,边框实现从左至右颜色渐变
  2. 在shell脚本中没有换行符的#39;echo#39;
  3. s3c2440地址分配
  4. linux 3.0.8 alsa数据流程分析
  5. OpenJudge NOI 1.5 15:银行利息
  6. linux xmind无法运行,linux安装xmind的方法步骤
  7. pandas数据聚合与分组
  8. IOS开发(63)之GCD执行延迟操作
  9. Kubernetes的系统架构与设计理念
  10. String特殊值的判断方式
  11. oracle——监听(三、监听配置)
  12. 试题12 交叉排序(小-大,大-小)
  13. 微电子电路——例题总结
  14. linux vi编辑(20160628)
  15. 一些排序算法的Python实现
  16. Linux 下的桌面指针时钟
  17. why-not 和 why 问题简介
  18. java.sql.SQLException: No database selected
  19. MC33063电源啸叫
  20. 计算机关机更改域用户登录,计算机怎么退域和重新加域?

热门文章

  1. [LeetCode] Restore IP Addresses 复原IP地址
  2. iOS---Objective-C: +load vs +initialize
  3. ionic2.0禁止横屏模式
  4. CPU 和内存虚拟化原理 - 每天5分钟玩转 OpenStack(6)
  5. Ext JS 6正式版的GPL版本下载地址
  6. Linux大文件传输(转)
  7. CentOS安装配置之基本
  8. 丰富多彩的Android onTouch事件
  9. 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了)
  10. .condarc文件是什么