给定两个大小为 m 和 n 的有序数组 nums1 和 nums2

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2] 则中位数是 2.0

示例 2:

nums1 = [1, 2]
nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 log 级别。回顾下中位数,对于一个有序数组,如果数组长度是奇数,那么中位数就是中间那个值,如果长度是偶数,就是中间两个数的平均数。 二分查找:两个指针扫一下,每次选小的,找到第mid个,就是中位数。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int length1 = nums1.size();
int length2 = nums2.size();
int mid = (length1+length2)/;
int s = ;
int l = ;
int r = ;
int now = ;
int pre = ;
while(s<=mid && l<length1 && r<length2){
pre = now;
if(nums1[l]<nums2[r]){
now = nums1[l];
l++;
}else{
now = nums2[r];
r++;
}
s++;
}
while(s<=mid && l<length1){
pre = now;
now = nums1[l];
l++;
s++;
}
while(s<=mid && r<length2){
pre = now;
now = nums2[r];
r++;
s++;
}
if((length1+length2)!=mid*){
return now;
}else{
return 1.0*(now+pre)/;
}
}
};
05-06 15:09