两个已经排好序的数组,找K位数 O(log(m+n))
来源:互联网 发布:mac上玩qq游戏 编辑:程序博客网 时间:2024/06/05 13:33
转自:http://www.cnblogs.com/qi09/archive/2011/10/18/2216844.html
题目:现在有两个排好序的整数数组,a[N]和b[N],要求写一个函数,功能为返回两个数组中第N大数和第N+1大数的中间值,即求解两者的和除以2。
函数原型:double getMedian( int a[], int b[] );
下面,我们先来分析一个类似的问题,假设a和b都是升序的,分别有n1和n2个元素,求两个数组合并后第k大元素值。
分别取两个数组中间索引的数,a[x]和b[y],比较两个数的大小:
if( a[x] <= a[y] )
——————————————————————————————————————————————————————————————
如果k <= x+y+1,则可以判断出b[y]以及b[y]后面的元素都可以排除在外,减小搜索规模。
如果k > x+y+1,则可以判断出a数组的前半部分元素都不符合条件,减少a一半的搜索规模。
该算法利用了递归的思想,结束条件是:
a中元素排除出去,则选择b中得第k大元素;
b中元素全部排除,选择a中第k大元素。
- 两个已经排好序的数组,找K位数 O(log(m+n))
- Java实现O(log(n+m))两个有序数组中第K大元素或中位数
- leetcode:Median of Two Sorted Arrays (找两个序列的中位数,O(log (m+n))限制) 【面试算法】
- 【雅虎笔试题】两个已经排好序的数组,找中位数
- 【雅虎笔试题】两个已经排好序的数组,找中位数
- 求两个不等长、有序数组的中位数非常简洁的O(log(min(M,N)))迭代解详细解释
- LeetCode Median of Two Sorted Arrays 在两个已排列的数组中找出中位数。时间复杂度为O(log(min(N,M))
- 两个排好序的数组找第k大
- 假设x[m], y[n]是两个排好序的数组,并且没有重复元素,要找第k小的元素
- 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回
- LeetCode4. Median of Two Sorted Arrays(寻找第k小数:分治O(log(n+m)))
- 复杂度为log(m+n)下求有序数组A和B有序合并之后第k小的数
- 两个字符串包含hashtalbe的O(m+n)
- 从俩个有序数组中找出第K小的数。要求时间复杂度O(logmin(m,n))
- 算法兴趣-----求两个已排序数组的交集和并集(算法复杂度O(N+M))
- 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
- 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
- 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
- Java 使窗口位于屏幕中间
- poj-3461 kmp重叠匹配
- 排序算法-选择排序 java
- Google Practice Round_A: Bad Horse
- EXT随堂记
- 两个已经排好序的数组,找K位数 O(log(m+n))
- JSP技术模型(一)JSP语法概述
- JSP技术模型(二)JSP页面生命周期
- 像素、分辨率与图片大小
- Android NDK 中使用C++源文件和使用C文件的不同
- 局域网共享mysql
- linux内核源码阅读之facebook硬盘加速利器flashcache之一
- 关于静态窗体定时器的线程运行
- C++及Windows异常处理(try,catch; __try,__finally; __try, __except)——一道笔试题引起的探究