求两个递增数组的中位数

该博客探讨了如何利用二分查找算法解决寻找两个递增数组中位数的问题。通过扩展到寻找第k个数的情况,作者详细解释了算法思路,指出当nums1[2] <= nums2[2]时,nums1的前三个元素不包含第6小的元素。通过递归处理数组,不断调整指针位置,最终找到目标元素。提供的JavaScript代码实现了这一算法,其时间复杂度为O(log k)
摘要由CSDN通过智能技术生成

题目在这里。

先举两个例子:

例1

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

例2

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

实际上这道题我们可以扩展为:求两个递增数组的第k(从1开始)个数。中位数只是其中的一个特例。

这道题我们可以采用二分查找(binary search)的思想来处理。

先上一张图:


很明显,我们要求的目标值是下标为5和6的两个元素的平均值。我们先求下标为5的元素的值也就是第6个元素,或者说,我们称之为新数组第六小的元素。

我们假设,前6个元素中有3个元素从nums1中取得,有三个元素从nums2中取得。如果nums1[2]的值<= nums2[2],那么根据递增数组的性质,我们能够知道,nums1中前三个元素的值都<=nums2[2],所以,nums1中的前三个元素一定不是第六小的元素,直接丢弃。这时候,nums1的指针n指向下标3的位置,nums2的指针m依然停留在0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值