题目来源:《剑指offer》面试题36

  题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这两个数组中的逆序对的总数。例如数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4)和(5,4)。

  下面把《剑指offer》的分析贴上来:

  

                                

                                                                                       

代码:

int CountInversionPair(vector<int>& nums) {if (nums.size() <= 1) return 0;int count = 0;CountInversionPair(nums, 0, nums.size() - 1, count);return  count;
}void CountInversionPair(vector<int> &nums, int start_pos, int end_pos,int &count) {if (start_pos >= end_pos)return;int mid = start_pos + (end_pos - start_pos) / 2;CountInversionPair(nums, start_pos, mid, count);CountInversionPair(nums, mid + 1, end_pos, count);Merge(nums, start_pos, mid, end_pos, count);
}void Merge(vector<int>& nums, int start_pos, int mid,  int end_pos, int &count) {if (start_pos == end_pos)return;vector<int> temp_nums(end_pos - start_pos + 1);int left_index = mid;int right_index = end_pos;int original_index = end_pos - start_pos;while (left_index >= start_pos && right_index > mid) {if (nums[left_index] > nums[right_index]) {count += right_index - mid;temp_nums[original_index--] = nums[left_index--];} else {temp_nums[original_index--] = nums[right_index--];}}for (; left_index >= start_pos; left_index--)temp_nums[original_index--] = nums[left_index];for (; right_index > mid; right_index--)temp_nums[original_index--] = nums[right_index];for (int i = start_pos, j = 0; i <= end_pos; i++) {nums[i] = temp_nums[j++]; }}

转载于:https://www.cnblogs.com/vincently/p/4823154.html

【算法题目】数组中的逆序对相关推荐

  1. 算法:数组中的逆序对

    * @Description 数组中的逆序对 * @问题: 题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P ...

  2. 数据结构与算法--数组中的逆序对

    题目:在数组中的两个数字如果签名一个数字大于后面的数组,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 案例:输入数组{7,5,6,4}中一共有5个逆序对分别是{7,6},{ ...

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

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

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

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

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

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

  6. 【剑指offer】_12 数组中的逆序对

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

  7. vb.net中递归退到最外层_数组中的逆序对

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

  8. 面试题36:数组中的逆序对

    题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.例如,有一个数组为Array[0..n] 其中有元素a[i],a[j]. ...

  9. 剑指offer面试题[36]-数组中的逆序对

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

最新文章

  1. JSON解析与XML解析的区别
  2. [BZOJ4756] [Usaco2017 Jan]Promotion Counting(线段树合并)
  3. 没完没了的Cookie,读懂asp.net,asp等web编程中的cookies
  4. 软件工程个人项目——买书的最低价格
  5. FPGA开发经验谈-FPGA 设计的四种常用思想与技巧(二)
  6. FB面经Prepare: Email User
  7. c# winform 打包(带数据库安装)
  8. Windows Phone 7 开发 31 日谈——第22日:应用?还是 游戏?
  9. √2是个无理数,没有尽头,为什么边长为1的直角三角形可以画出来? 是悖论吗?...
  10. 大前端算法入门之二分查找
  11. 牛客网暑期ACM多校训练营(第十场)
  12. NLB群集的两种操作模式-2
  13. Webrtc之源码结构
  14. python 可视化界面 打开excel_python如何将excel数据处理可视化
  15. mysql中column的用法_关于MySQL的一些用法
  16. Detecting Deep-Fake Videos from Appearance and Behavior
  17. 头条视频不足一分钟有收益吗,头条30秒视频都有收益吗
  18. SAP MM 常见移动类型及定义
  19. 嵌入式Linux(二)汇编LED驱动实验
  20. 【产业互联网周报】阿里将暂停阿里云美国扩张计划;协同办公领域硝烟又起,华为推WeLink,企业微信与微信打通;申通全面迁至阿里云...

热门文章

  1. 火力发电厂与变电站设计防火规范_玻璃防火门在新版的GB500162014建筑设计防火规范中的应用与注意的事项...
  2. c语言实现点在多边形内部,求教这个判断点是否在多边形内的C语言算法用的什么原理....
  3. Vue基本操作及运行截图总结
  4. 【车牌识别】+【模板匹配】基于智能交通的车牌识别系统
  5. 多进程通信相关函数归纳
  6. TensorFlow基础(1)-中使用多个 Graph
  7. Ankhsvn 改名出错
  8. C++访问控制符内容相关介绍
  9. PS打造油画般的风景人像
  10. 硅谷渐患“大城市”病,世界创新中心或将外移