博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个有序数组的中位数
阅读量:5782 次
发布时间:2019-06-18

本文共 825 字,大约阅读时间需要 2 分钟。

o(logn)

 

两种方法:

 

一、二分查找

中位数只有一个,它前面有 c = (m+n-1)/2 个数比它小。中位数要么出现在数组A中,

要么出现在数组B中,我们先从数组A开始找。考察数组A中的一个元素A[p], 在数组A中,

有 p 个数比A[p]小,如果数组B中恰好有 c-p 个数比 A[p] 小, 则俩数组合并后就恰好有 c 个数比A[p]小,

于是A[p]就是要找的中位数。 如下图所示:

如果A[p] 恰好位于 B[c-p-1] 和 B[c-p] 之间,则 A[p] 是中位数

如果A[p] 小于 B[c-p-1] ,说明A[p] 太小了,接下来从 A[p+1] ~A[m-1]开始找

如果A[p] 大于 B[c-p] ,说明A[p] 太大了,接下来从 A[0] ~A[p-1]开始找。

如果数组A没找到,就从数组B找。

 

二、比较两个数组的中位数

ar1[]和ar2[]为输入的数组

算法过程:

1.得到数组ar1和ar2的中位数m1和m2

2.如果m1==m2,则完成,返回m1或者m2

3.如果m1>m2,则中位数在下面两个子数组中

a) From first element of ar1 to m1 (ar1[0...|_n/2_|])

b) From m2 to last element of ar2 (ar2[|_n/2_|...n-1])

4.如果m1<m2,则中位数在下面两个子数组中

a) From m1 to last element of ar1 (ar1[|_n/2_|...n-1])

b) From first element of ar2 to m2 (ar2[0...|_n/2_|])

5.重复上面的过程,直到两个子数组的大小都变成2

6.如果两个子数组的大小都变成2,使用下面的式子得到中位数:Median = (max(ar1[0], ar2[0]) + min(ar1[1], ar2[1]))/2

转载地址:http://rncyx.baihongyu.com/

你可能感兴趣的文章
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
android代码生成jar包并混淆
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>
iOS的主要框架介绍 (转载)
查看>>
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>