如何在两个有序自增数组中寻找第 k 大的数?并分析时间复杂度?
充分利用两个数组都是有序的条件: 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))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。