找两个排序数组的中位数
来源:互联网 发布:手机淘宝申请售后不了 编辑:程序博客网 时间:2024/05/15 19:13
题目:给定两个排序的数组a,b,长度分别为m和n,找出这两个数组的中位数。时间复杂度为O(log(m+n))。
比如:a=[1,2,3,4],b=[2,3,4,]中位数为3。
假定a,b长度分别大于k,现在选择第k个数(排序后的第k个),先将a的第k/2个元素(a[k/2-1]和b的第k/2个元素(b[k/2-1]比较,存在以下三种情况:
a[k/2-1]==b[k/2-1],第k个数找到了,就是a[k/2-1]或b[k/2-1]
a[k/2-1]>b[k/2-1],第k个数肯定不在b[0...k/2-1],删除这一段
a[k/2-1]<b[k/2-1],第k个数肯定不在a[0...k/2-1],删除这一段
int mid(int a[],int b[],int m,int n,int k) //假定m<=n{if(m>n) //若不是m<=n,调换一下 return mid(b,a,n,m,k);if(m==0)return b[k-1];if(k==1)return Min(a[0],b[0]);int ia=Min(k/2,m);int ib=k-ia;if(a[ia]==b[ib]) //第k个数找到return a[ia];if(a[ia]>b[ib]) //第k个数肯定不在b[0..ib],所以,删除这些,找第k-ib个数return mid(a,b+ib,m,n-ib,k-ib);else //a[ia]<b[ib] 第k个数肯定不在a[0...ia],所以,删除这些,找k-ia个数return mid(a+ia,b,m-ia,n,k-ia);}int Mid(int a[],int b[],int m,int n){int k=(m+n)/2;return mid(a,b,m,n,k);}
0 0
- 找两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 找两个有序数组的中位数
- 2-找两个有序数组的中位数
- Median of Two Sorted Arrays(找两个排序数组的中位数,二分法)
- leetcode 求两个排序数组的中位数
- 求两个排序数组的中位数
- 【算法】【分治】两个排序数组的中位数
- 寻找两个排序数组的中位数
- 找出两个排序数组的中位数
- LintCode 两个排序数组的中位数
- JPA培训———Spring MVC数据绑定的扩展
- Codeforces 463E Caisa and Tree(暴力)
- hdu 2137
- 黑马程序员--面向对象(接口,内部类,包,Object类)
- linux(ubuntu)下安装myeclipse
- 找两个排序数组的中位数
- NYOJ-20岁生日
- 将Sublime Text 2搭建成一个好用的IDE
- pctused、pctfree、initrans,maxtrans 等参数
- Android开发————shape属性的利用
- hdu 4770 状态压缩模拟
- 关于uva10123
- 我之见--java多线程 ConcurrentHashMap 源码分析
- SVD分词分类的思考