C++求数组中的逆序对。

如果在数组中的两个数字如果前面的一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数

#include<iostream>

using namespace std;
//归并排序统计逆序对
int merge(int num[],int start,int middle,int end,int*temp)
{
int k=0,i=start,j=middle+1,count=0;
for(;i<=middle&&j<=end;)
{
if(num[i]>num[j])
{
temp[k++]=num[i++];//按照的是从大到小的顺序排
count+=end-j+1;//如果第一个子数组的数字大于第二个子数组中的数字,则构成逆序数目等于第二个子数组中剩余数字的个数
}
else
temp[k++]=num[j++];
}
while(i<=middle)
temp[k++]=num[i++];
while(j<=end)
temp[k++]=num[j++];
for(int index=0;index<k;index++)
num[start+index]=temp[index];//注意这里在跟新num中相应位置排序的时候不能写为index,一定要写为start+index
return count;
}
int InversePairs(int num[],int start,int end,int* temp)//这个其实就是改编自归并排序的mergesort函数,基本都是一样的
{
int count=0;
if(num==NULL||start>end||end<0||start<0)
return 0;
if(start<end)
{
int middle=(start+end)/2;
count+=InversePairs(num,start,middle,temp);//左半部分逆序对数量
count+=InversePairs(num,middle+1,end,temp);//右半部分逆序对数量
count+=merge(num,start,middle,end,temp);//合并两个部分时产生的逆序对数量,并把之前计算出的逆序对数量累加
}
return count;
}

int main()
{
int num[]={7,5,6,4};
int length=sizeof(num)/sizeof(int);
int *temp=new int[length];
int result=InversePairs(num,0,length-1,temp);
cout<<result<<endl;
delete [] temp;
return 0;
}

C++求数组中的逆序对相关推荐

  1. c语言数组求逆序对,LeetCode 面试题51. 数组中的逆序对

    面试题51. 数组中的逆序对 题目来源:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/ 题目 在数组中的两个数字,如果 ...

  2. 剑指Offer - 面试题51. 数组中的逆序对(归并排序,求逆序对)

    1. 题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5限制: 0 ...

  3. 输入一个数组,求出这个数组中的逆序对的总数

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

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

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

  5. 牛客(35)数组中的逆序对

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

  6. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

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

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

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

  8. 剑指offer之【数组中的逆序对】

    题目: 数组中的逆序对 链接: https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tqId= ...

  9. 倒序存放数组java_java实现数组中的逆序对

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对,例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}.输 ...

最新文章

  1. SQL Server 中master..spt_values的应用
  2. Spring Boot注入自定义properties文件配置
  3. Python内置函数(62)——exec
  4. return view详解
  5. [渝粤教育] 西南科技大学 线性代数 在线考试复习资料
  6. 用大数据挑选出国外最值得看的前50条swift教程(v.2019)
  7. 舱机器人尾巴毛茸茸_这个毛茸茸的机器人不仅可撸,还会摇尾巴
  8. vs2017 git 操作重置、还原、挑拣对比
  9. 颠覆性创始人Tony Delgado在波多黎各启动编码训练营
  10. 天气数据垂手可得-IBM SPSS Modeler 18.0扩展应用实操练习
  11. 从小米人事变动谈引入人才与自主培养人才哪个更重要
  12. 电机集电环是如何更换与运行的
  13. 删除链接到WLW清单文件
  14. 130个Photoshop经典合成教程
  15. 如何利用训练好的神经网络进行预测
  16. cad角度命令怎么输入_标注CAD图纸原来这么简单?!赶紧学起来,稳赚不亏
  17. opengl 画椭圆_漫谈椭圆的几何性质(之一)
  18. QMdiSubWindow
  19. 【C#懒蛋编程——5分钟经验分享】02使用partial关键字,分离代码
  20. 【C#】转换为整型(int)及int取整

热门文章

  1. 2020人工神经网络第一次作业-参考答案第六部分
  2. 第十五届全国大学生智能车全国总决赛获奖信息-华东赛区
  3. 第十五届全国大学生智能车竞赛各分赛区赛道数量以及比赛系统数量
  4. 测试可编程波形发生器 AD9833
  5. 简述linux各个组成部分的定义及功能,Mariadb的架构及相关概念
  6. 计算机所在网络最多可实际分配,网络技术应用1
  7. vs社区版到期离线激活_vs2019离线安装包
  8. 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
  9. redispython源文件_Redis与Python在项目中的交互
  10. python无法处理特别大的数据文件_Python实现快速大文件比较代码解析