两个有序数组中找第k大的数

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个有序数组中找第k大的数相关的知识,希望对你有一定的参考价值。

两个有序数组中找第k大的数

已知有两个从小到大的有序数组,求两个数组的第k大的数。

[1, 4, 6, 8, 12, 15, 18, 20, 28, 29]
[2, 5, 7, 10]
第8大的数是10

思路分析

4.寻找两个正序数组的中位数一样。

两个数组都有序,那么就利用这个有序的特点来解决这个问题。假设数组分别是a b,令middle = k/2, middle_ex = k - middle。比较a[middle]和b[middle]的值。

  • 如果a[middle - 1] == b[middle_ex - 1],那么a[middle-1]不正好是第k大的数么,因为 k= middle_ex + middle,且两个数组都有序。
  • 如果a[middle - 1] < b[middle_ex - 1],让a = a[middle:],前面的那些元素都可以舍弃了, 问题转变成从a 和 b这两个数组里找到第 k - middle 大的值
  • 如果a[middle - 1] > b[middle_ex - 1],让b = b[middle_ex:],前面那些元素都可以舍弃了,问题转变成从a 和 b这两个数组里找到第 k - middle_ex大的值

为什么在取值时用的索引是middle - 1呢,其实原因很简单,我们要找第k大的数,k最小是1,你不能说取第0大的数,我们日常是从1开始计数的,而计算机是从

以上是关于两个有序数组中找第k大的数的主要内容,如果未能解决你的问题,请参考以下文章

无序数组中找第k大的数

03K个数或第k个数算法

03K个数或第k个数算法

两个有序数组,找第k小的数//未完

[Leetcode]Top K问题总结

无序数组求第K大/第K小的数