LeetCode C++5-寻找两个正序数组的中位数
题目描述
给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。要求算法的时间复杂度为O(log(m+n))
举例:
eg1. 输入: nums1=[1,3], nums=[2] 输出:2.0000
eg2. 输入:nums1=[1,2], nums2=[3,4] 输出:2.5
解题方法:二分查找,假设nums1的元素个数和nums2的元素个数的和为 n。 若n为奇数,中间数为nums1和nums2合并后的第 ( n / 2 + 1)个数;若n为偶数,则中间数为合并后的第n / 2 、 n / 2 + 1个数组的和的平均值。所以,我们可以将题目转换为:
n=奇数, 求两个有序数组的第k个元素,k = n / 2 + 1;
n=偶数, 求两个有序数组的第k和k+1个元素,k = n / 2;
如何求两个有序数组的第k个数字呢。可以通过从每次比较nums1[k/2-1]和nums2[k/2-1]的大小,并排除教小的前k/2个元素。同时注意k值减小后的各个边界条件。
代码
#i
共有 0 条评论