开发者社区> 问答> 正文

如何在两个有序自增数组中寻找第 k 大的数?并分析时间复杂度?

如何在两个有序自增数组中寻找第 k 大的数?并分析时间复杂度?

展开
收起
游客4skzfvnrxrzbi 2021-12-23 15:18:27 459 0
1 条回答
写回答
取消 提交回答
  • 充分利用两个数组都是有序的条件: 1)当 array1[k/2-1]==array2[k/2-1]则返回 array1[k/2-1] 或者 array2[k/2-1] 2)当 array1[k/2-1]>array2[k/2-1]则 array2 在 [0,k/2-1] 范围内的元素一定比 array1、array2 合并后第 k 个元素小,可以不用考虑 array2 在 [0,k/2-1] 范围内的元素 3)当 array1[k/2-1]<array2[k/2-1]则 array1 在 [0,k/2-1] 范围内的元素一定比 array1、array2 合并后第 k 个元素小,可以不用考虑 array1 在 [0,k/2-1] 范围内的元素因此算法可以写成一个递归的形式,递归结束的条件为: 1)array1[k/2-1]==array2[k/2-1]return array1[k/2-1] 2)array1 或者 array2 为空时,return array1[k-1] 或者 array2[k-1] 3)k==1 时,返回 min(array1[0],array2[0])时间复杂度 O(log(m+n))

    2021-12-23 18:05:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载