`
gaofen100
  • 浏览: 1227846 次
文章分类
社区版块
存档分类
最新评论

找出两个已经排好序的数组的中位数

 
阅读更多

问题:

给两个已经排好序的数组,一个长度为 m (m >= 1), 一个长度为 n (n >= 1),找出这两个数组的中位数。时间复杂度要求为 O(m+n), 空间复杂度为 O(1)。

其实这个问题本身来讲是不难的,关键的关键,是对一些边界条件的处理。


思路:我们首先判断中位数的位置,如果 m+n 为奇数,那么中位数的位置是 第 (m+n+1)/2。 如果 m + n 为偶数,那么我们要找出第 (m+n)/2 和 第(m+n)/2 + 1, 然后求平均。

我们在两个数组上都分配一个“指针”指到起始位(假定A数组的指针为pa, B数组的指针为pb),然后根据它们值的大小,指针不断的向前推进,直到总的被遍历的数的个数为(m+n+1)/2 (奇数情况)或者为(m+n)/2 (偶数情况)。

我们在移动指针对数组中的数进行比较的时候,我们要考虑指针是否已经操过数组的大小,然后才能进行比较,这是一个非常值得注意的地方。








分享到:
评论

相关推荐

    两个排序数组中位数

    已经两个已经排好序的数组,找出两个数组合起来的中间大的数字

    分治法求两列有序数组的中位数的程序

    (1)设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数,设计一个算法复杂度为O(logn)的分治算法,找出X和Y中2n个数中的中位数。(中位数:个数为奇数:中间位置上的数;个数为偶数,中间两个数的...

    medi:X 和Y 的中位数问题

    设X[0:n-1]和Y[0:n-1]为2 个数组,每个数组中含有n 个已排好序的数。试设计一个O(log n)时间的算法,找出X 和Y 的2n 个数的中位数。 ★数据输入 输入数据第1 行是每个数组中元素个数n;接下来的2 行中每行有n 个整数,...

    分治法-中位数

    题目描述了一个具体场景:给定两个长度相同的整数数组`x`和`y`,要求找出这两个数组合并后形成的数组的中位数。输入格式如下: - 第一行:`n`,表示数组`x`和`y`的元素个数; - 第二行:`x`数组的`n`个数,用空格...

    求N位个数的数则的中位数

    求2n个数的中位数,设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试设计一个O(logn)时间的算法,找出X和Y的2n个数的中位数

    javascript入门笔记

    特点:将 a 和 b 先转换为二进制,按位操作,对应位置上的两个数字,相同时,该位整体结果为0,不同时,该位的整体结果为 1 使用场合:快速交换两个数字 5 ^ 3 101 011 ========== 110 结果为 6 练习: ...

    剑指offer(牛客网)

    1. 二维数组的查找:这是一个在排好序的二维数组中寻找特定数字的问题。通过比较右上角或左下角的数字,可以将搜索范围缩小,直到找到目标值或确定它不存在。算法的时间复杂度为O(m+n),其中m为行数,n为列数。 2. ...

    XXXX届华为校园招聘上机考试题.docx

    - 最后输出排好序的数组和中位数。 #### 3. 示例代码解析 ```c int med; for (i = 0; i ; i++) for (j = 0; j ; j++) if (input[j] > input[j + 1]) { temp = input[j]; input[j] = input[j + 1]; input[j + ...

    A.3.4 数组排序和计算(Console).zip

    要找出数组中的最大值: ```csharp int max = numbers.Max(); ``` 或者计算平均值: ```csharp double average = numbers.Average(); ``` 这个"A.3.4 数组排序和计算(Console).zip"的文件可能包含了这些操作的...

    数据结构与算法题解

    - 找出两个有序数组的中位数。 - **Sqrtx** - 求一个数的平方根。 - **WoodCut** - 木材切割问题。 **4. 数学与位操作(MathandBitManipulation)** - **SingleNumber** - 找出数组中只出现一次的数字。 - **...

    面试算法整理

    - 该方法基于这样一个事实:如果数组中的某个数字出现次数超过数组长度的一半,那么这个数字一定是数组的中位数。 2. **具体步骤**: - 使用快速排序中的分区操作,随机选取一个基准值,然后将数组分为左右两部分...

    JavaSE题库.docx

    8. 找出两个数组中的最大值 * 知识点:数组操作、比较语句 * 本题要求设计一个方法,能够找出在两个数组中最大的一个数。这里需要使用数组操作来比较两个数组的元素,并使用比较语句来找到最大值。 9. 根据公式...

    《剑指Offer》题目及Java版代码(带目录)

    14. 数组中只出现一次的两个数,而其他数都出现两次:这可以利用位运算中的异或操作来解决。 15. 找出最小的K个数:这需要了解如何在大数据集中高效地找到最小的几个数。 16. 连续子数组的最大和:通过动态规划...

    排序汇总(Java).pdf

    插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。直接插入排序适合小规模数据,而折半插入排序通过二分查找降低了比较的复杂性。希尔排序是一种改进的插入排序,...

    实验四_循环结构汇编语言程序设计实验报告.doc

    对于找出数组中最大值和最小值的问题,可以使用一个外层循环遍历整个数组,内层循环则用于比较当前元素与已知最大值或最小值,更新最大值和最小值变量。 实验中提到了两种具体的排序算法:冒泡排序和选择排序。冒泡...

    c代码-从键盘任意输入五个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名。

    在这个C语言编程问题中,我们需要实现一个程序,它允许用户输入五个学生的姓名,并根据字典顺序找出并打印出排列在最前面的姓名。这涉及到字符串处理、数组操作以及排序算法的基础知识。 首先,我们需要理解C语言中...

    数据结构与算法.xmind

    递归拆分出两个有序的数组,从mid的位置开始拆分,递归出口:只有一个值的时候就不用拆分了 合并两个有序的数据 分别往两个数组填充已有序的数据 比较两个数组的值谁小,谁小就放到我们的...

    JAVA各种排序

    直接插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录个数加一的有序表。算法步骤如下: - 将数组分为已排序序列和未排序序列。 - 从未排序序列中取出第一个元素,在已排序序列中...

    各种c++经典例题,多种编程语言

    题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 【程序25】 题目:将一个数组逆序输出。 【程序26】 题目:取一个整数a从右端开始的4~7位。 【程序27】 题目:打印出杨辉...

    个人针对学习几种排序算法的总结

    在计数排序中,首先要找出待排序的数组中最大和最小的元素;然后,统计数组中每个值为i的元素出现的次数,存入数组C的第i项;最后,根据数组C将原数组排序。这种方法在值比较集中时非常高效。 10. 位图排序: 位图...

Global site tag (gtag.js) - Google Analytics