白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
来源:互联网 发布:淘宝网店好经营吗 编辑:程序博客网 时间:2024/05/18 01:23
首先来看看原题
微软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
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 【白话经典算法系列之九】 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题) .
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对
- 白话经典算法系列之五 归并排序的实现
- 白话经典算法系列之五 归并排序的实现
- android关闭指定的activity
- 高并发之多线程总结
- Ubuntu下Gearman安装搭建
- ubuntu安装tensorflow
- HTML表单及CSS[思维导图]
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- jenkins日志文件体积过大问题
- 2017网易春招 魔力手环(矩阵快速幂)
- 移动端基本事件
- JQ实现将字符串的铭文转换成密文存放,并显示密文,密文形成方法是:输入的字母用后4个字母替换,如字母A用其后第4个字符E代替,字母a用e代替。
- sdut- 离散题目4
- redis系统性总结笔记
- 2 Apache Shiro 身份认证(登录)
- 汉诺塔