白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
来源:互联网 发布:广东利为网络和多益 编辑:程序博客网 时间:2024/05/21 09:00
首先来看看原题
微软2010年笔试题
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数。
计算数列的逆序数对个数最简单的方便就最从前向后依次统计每个数字与它后面的数字是否能组成逆序数对。代码如下:
运行结果如下:
这种方法用到了双循环,时间复杂度为O(N^2),是一个不太优雅的方法。因此我们尝试用其它方法来解决。
在《白话经典算法系列之五归并排序的实现》中观察归并排序——合并数列(1,3,5)与(2,4)的时候:
1.先取出前面数列中的1。
2.然后取出后面数列中的2,明显!这个2和前面的3,5都可以组成逆序数对即3和2,5和2都是逆序数对。
3.然后取出前面数列中的3。
4.然后取出后面数列中的4,同理,可知这个4和前面数列中的5可以组成一个逆序数对。
这样就完成了逆序数对的统计,归并排序的时间复杂度是O(N * LogN),因此这种从归并排序到数列的逆序数对的解法的时间复杂度同样是O(N * LogN),下面给出代码:
运行结果:
好了,介绍到这里后,相信大家对如何求数列的逆序数对已经有了很好的认识,文章中所用到的“知识迁移”这种方法还是不错的,值得大家掌握。
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8029996
阅读全文
0 0
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 【白话经典算法系列之九】 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题) .
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对
- 白话经典算法系列之五 归并排序的实现
- 白话经典算法系列之五 归并排序的实现
- NLP-词向量(Vector Representations of Words)
- CodeForces 827D Round #423 Div2F&Div1D:LCA+路径压缩+MST(最小生成树)
- 2017 7 12 测试
- Python中的排序函数argsort,sort,sorted
- 数据库varbinary字符串乱码问题
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 14.Scala中作为接口的trait、在对象中混入trait代码实战
- android LayoutParams和MarginLayoutParams
- 小球碰撞(NOIPD2T1难度)
- 求排列的逆序数
- python-filter
- 内核request_mem_region 和 ioremap的理解
- 支持任意张图片轮播的逻辑函数
- Spring Boot 启动加载数据 CommandLineRunner