1.长度相等的两个有序数组寻找上中位数

注:上中位数1 2 3 4 5 6为3(偶数两个中位数为前面那个)
思路:去掉不可能为上中位数的,剩下的简化组合求上中位数。

1.1 奇数序列

位置 位置 位置 位置 位置
1 2 3 4 5
1’ 2’ 3’ 4’ 5’

数字代表第几个数,求上中位数(第5小的数)

case1: 3=3’ 则3或者3’为上中位数
case2: 3>3’ 不可能为上中位数的为3(1 2 1’ 2’ 3’已经5个数比它小) 4 5 1’ 2’,可能的为1 2 3’ 4’ 5’
则这种情况下我们可以把这10个数简化为:

位置 位置 位置
1 2 3
3’ 4’ 5’

注:3已经不可能作为上中位数,但递归要求参数格式,加入凑格式,上下各传3个。

1.2 偶数序列

位置 位置 位置 位置
1 2 3 4
1’ 2’ 3’ 4’

数字代表第几个数,求上中位数(第4小的数)

case1: 2=2’ 则2或者2’为上中位数
case2: 2>2’ 不可能为上中位数的为3,4,1’,2’,可能的为1 2 3’ 4’
则这种情况下我们可以把这8个数简化为:

位置 位置
1 2
3’ 4’

注:递归结束条件 , 每个数组只剩下1个数,返回较小的。

2.长度不等的两个有序数组寻找合在一起后第k小的数,要求不合用二分解决(时间复杂度为O(log min(m,n) ),快速排序为O(log(m+n)))

case1: 长度为10和17的两个有序数组求第k小的数(1<=k<=10)

方法:两个数组取前k个数,转化为长度相等的两个有序数组寻找上中位数

case2: 长度为10和17的两个有序数组求第k小的数,如第25小的数(17< k<=27)。

方法:两个数组分别取后3个数,长度为10的数组淘汰7个数,长度为17的数组淘汰14个数,剩下的数取上中位数只能是第24(7+14+3)小的数。

附加单独判断第8个数和第15个数和另一个数组最大的数比较,若大于则这个数就是第25小的数.

否则扔掉这两个数,让剩下的4个数求上中位数。(转化为长度相等的两个有序数组寻找上中位数)(8[10淘汰]+15[17淘汰]+2[4选上中位数淘汰]=25)

位置 位置
9 10
16’ 17’

case3: 长度为10和17的两个有序数组求第k小的数,如第14小的数(10< k<=17)。

方法:取第一个数组全体和第二个数组一部分(淘汰前三个数和后三个数,单独比较第4个数,是返回,不是转化为:长度相等的两个有序数组寻找上中位数

3 专访ACM大神

两个有序数组合起来求第k小的数+左老师专访ACM大神(笔记)8月5日斗鱼直播实录相关推荐

  1. C++:求第k小的数

    问题:给定n(1<=n<=1000000)个元素,求第k小数(1<=k<=n). 输入:一组样例.第一行输入两个整数n和k.第二行输入n个不同的int范围内的数. 输出:输出一 ...

  2. 求第k小的数 O(n)复杂度

    博客转载地址:https://blog.csdn.net/flyawayl/article/details/53538369 思路: 利用快速排序的思想,把数组递归划分成两部分.设划分为x,数组左边是 ...

  3. 求第k小的数(洛谷P1923题题解,Java/C++语言描述)

    题目要求 题目链接 分析 <查找第K大/小元素算法> 这题不使用线性复杂度算法是过不去的(除非你用C++的[内置函数]or[快读+sort()]) Java应该是不可能过去的,你用C++可 ...

  4. 借组磁带机求第K小元素

    如果输入在磁带机上, 你的机器只有一个磁带机驱动器和几十字的内存,如何找第K小的数 1. 遍历一遍磁带,随即选择一个数M 2. 再遍历一遍磁带, 计算大于和小于M的个数,这样就可以获得数M在总序列中的 ...

  5. 面试题:找两个有序数组所有数第K小的数

    给定两个有序数组arr1和arr2,再给定一个整数k,返回两个数组中所有数中第k小的数.要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M, N}) ) 例如: ...

  6. 求两个有序数组的中位数或者第k小元素

    问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 设两个数组分别是vec1和vec2,元素数目分别是n1.n2. 算法1:最简单的办法就是把两个数 ...

  7. html5数组查找第二大数,2021-06-29:在两个都有序的数组中找整体第K小的数。

    2021-06-29:在两个都有序的数组中找整体第K小的数. 福大大 答案2021-06-29: 1.A和B长度不等的时候,需要把A和B的长度变成相等. A是短数组,B是长数组. 第k小的数,k从1开 ...

  8. 【最详细】BFPRT算法:时间复杂度O(n)求第k小的数字

    去年写了一篇对快排进行改进的算法,可以在时间复杂度 O(n)O(n)O(n)的情况下,找到第kkk小的数字. 那时候,我还不知道这个算法叫BFPRT算法--现在知道了,还知道它又被称为中位数的中位数算 ...

  9. BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排)

    我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/ . 去年写了一篇<分治算法 求第kkk小元素 O(n)O(n)O(n) & O( ...

最新文章

  1. Numpy 整体复制、按块复制、向量化操作、寻找缺失值、填充缺失值
  2. 真香!如何用300行代码写完一个Spring基本框架?
  3. 合格的前端不少,优秀的不多
  4. es6 模块的整体加载
  5. 系统时钟(汇编语言程序设计)
  6. AndroidStudio_Gradle命令行的使用_使用gradle命令编译出apk_以及依赖管理---Android原生开发工作笔记77
  7. AcWing 1270. 数列区间最大值(RMQ问题)
  8. android本地图片选择(相册选取,相机拍摄)
  9. 【蓝桥杯真题】2021年蓝桥杯省赛B组题目解析+代码(C/C++)
  10. 非计算机专业考研软件工程,#考研报名#计算机类、软件工程类考生报名前必看...
  11. Tidal生活方式丨解忧、故事与爱好:我是知乎用户,也是知乎答主
  12. 6,美国2012年总统候选人政治献金数据分析
  13. 电商跟微商的区别是什么呢
  14. 经济学硕士读计算机博士,去美国那些大学攻读经济学博士比较好?看完你就清楚了...
  15. 【微信小程序】微信小程序项目+仿哔哩哔哩b站
  16. 51nod 1113 矩阵快速幂 模板
  17. Java12个小练习_打印三角形_素数_利率_水仙花数_回文数
  18. matlab 中怎样使bode图相位平滑,更正相位角以生成更平滑的相位图
  19. 岭南师范学院专插本计算机,2020年岭南师范学院专插本招生计划出来了,共招250人...
  20. Python分析香港26281套在售二手房数据

热门文章

  1. java手机编译器不能编译_王牌战士叶羽天赋王牌战士叶羽天赋|王牌战士手游猎手莫甘天赋选择推荐_科贝软件网...
  2. 【高通SDM660平台 Android 10.0】(19) --- Camera_focus、Camera_snapshot、volume_up 按键工作原理分析
  3. 小米pro无法使用虚拟机
  4. Vue进阶(幺陆零):el-table之show-overflow-tooltip 属性不生效
  5. CF Edu10 A
  6. EBS OPP响应时间超时处理过程
  7. 鸿蒙手机王者荣耀怎么充值,苹果手机王者荣耀怎么充值?苹果系统充值王者荣耀教程...
  8. 零基础AI商业插画全能班教程
  9. Android适配页面底部虚拟按键
  10. 【C++】 strcasecmp函数