A,B是两个已经从小到大排序好了的数组,球这两个数组合并后的第k个元素。

很简单的想法,根据定义,把两个数组合并到一起,然后排序,然后就能得到了。

但是这样的复杂度是nlogn

还有就是用归并的思想,来找第k个元素,这样的复杂度是k

那还有没有快一点的呢?

我们比较A[k/2-1] , B[k/2-1] (减1是因为从0开始)

如果

A[k/2 - 1] < B[k/2 - 1] ,那么A[0..k/2-1]这段就可以抛弃了,他一定是在第k大的数的前面。

证明很简单,就不说了。。。

A[k/2-1] > B[k/2 - 1] 同上

如果相等,那就说明,任意一个就是第k大的元素。

那么我们就可以递归的来球这个问题了。

int find_kth(int * a , int na , int *b , int nb , int k)
{
if(nb < na)
return find_kth(b,nb,a,na,k);
if(na == )
return b[k - ];
if(k == )
return min(a[] , b[]); int pa = min(k / , na);
int pb = k - pa; if(a[pa - ] < b[pb - ])
return find_kth(a + pa, na - pa , b , nb , k - pa);
else if(a[pa -] > b[pb - ])
return find_kth(a , na , b + pb , nb - pb , k - pb);
else return a[pa - ];
}

就是需要处理几个边界问题。

如果有一个数组为空,那么直接返回另外一个的k-1个元素

如果k = 1, 那么就是两个数组第一个元素中最小的那个。

寻找已排序的连个数组的第k个元素的更多相关文章

  1. 在N个元素的数组中获取K个元素的所有组合问题

    可以写循环,也可以用模块. 百度许久找到一个博客 http://blog.sina.com.cn/s/blog_4a0824490101f1kc.html 详细介绍了Algorithm::Combin ...

  2. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

  3. 寻找无序数组中的前k大元素

    题目描述 以尽可能小的代价返回某无序系列中的两个最大值,当有重复的时设置某种机制进行选择. 题解 首先要考虑的是重复的数的问题. A.不处理重复数据方法:在处理第k大的元素时不处理重复的数据,也就是将 ...

  4. 一题多解(五) —— topK(数组中第 k 大/小的数)

    根据对称性,第 k 大和第 k 小,在实现上,是一致的,我们就以第 k 小为例,进行说明: 法 1 直接排序(sort(A, A+N)),当使用一般时间复杂度的排序算法时,其时间复杂度为 O(N2) ...

  5. 无序数组求第K大的数

    问题描述 无序数组求第K大的数,其中K从1开始算. 例如:[0,3,1,8,5,2]这个数组,第2大的数是5 OJ可参考:LeetCode_0215_KthLargestElementInAnArra ...

  6. [nowCoder] 两个不等长数组求第K大数

    给定两个有序数组arr1和arr2,在给定一个整数k,返回两个数组的所有数中第K小的数.例如:arr1 = {1,2,3,4,5};arr2 = {3,4,5};K = 1;因为1为所有数中最小的,所 ...

  7. [Swift]LeetCode154. 寻找旋转排序数组中的最小值 II | Find Minimum in Rotated Sorted Array II

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  8. 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素

    [python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...

  9. [LeetCode每日一题]153.寻找旋转排序数组中的最小值

    [LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...

随机推荐

  1. python正则表达式02--findall()和search()方法区别,group()方法

    import re st = 'asxxixxsaefxxlovexxsdwdxxyouxxde' #search()和 findall()的区别 a = re.search('xx(.*?)xxsa ...

  2. wlr快捷键

    ref:http://www.cnblogs.com/zhangyang/archive/2011/07/22/2113856.html   Windows Live Writer提供了许多方便的快捷 ...

  3. hadoop,hbase,hive

    linux上安装hadoop,然后安装hbase,然后安装zookeeper,最后安装hive.hbase安装在hdfs下.hive是纯逻辑表,hbase是物理表.hdfs是hadoop上的一个组件.

  4. Hihocoder 1275 扫地机器人 计算几何

    题意: 有一个房间的形状是多边形,而且每条边都平行于坐标轴,按顺时针给出多边形的顶点坐标 还有一个正方形的扫地机器人,机器人只可以上下左右移动,不可以旋转 问机器人移动的区域能不能覆盖整个房间 分析: ...

  5. 无法访问hadoop yarn8088端口的解决方法

    1.检查是否正确的启动了resourcemanager服务 若是没有启动,请检查yarn-site-xml配置 2.若是启动了 1.检查客户机和虚拟机之间是否能够相互ping通 2.检查虚拟机防火墙是 ...

  6. linux压缩和解压缩命令大全--费元星站长

    tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...

  7. 途牛banner自动轮播

    <!DOCTYPE html>               <!--申明文档类型:html--> <html lang="en">       ...

  8. 《Cracking the Coding Interview》——第17章:普通题——题目8

    2014-04-28 23:35 题目:最大子数组和问题. 解法:O(n)解法. 代码: // 17.8 Find the consecutive subarray with maximum sum ...

  9. 21、AngularJs知识点总结 part-3

    1.选择框select 在 AngularJS 中我们可以使用 ng-option 指令来创建一个下拉列表,列表项通过对象和数组循环输出,也可以使用ng-repeat 指令来创建下拉列表: 区别:ng ...

  10. 恢复误删除表黑科技之relay log大法(续)

      Preface       I've stuck twice in my previous experiments in backing up dropped tables.I am still ...