题意:
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
-感觉这一题好像没有那么难,就是遇到一个问题在最后求中位数的时候,不管怎么改变都是整数,后来才发现是定义的时候把min定义为int型了,应该定义为double型才对。
主要思路:
a.当数组1或2有一个为空时;
b.当数组1或2都不为空时。
相关代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
int len = len1 + len2;
vector<int> nums(len);
int num1 = 0, num2 = 0;
for (int m = 0;m<len;m++) {
if (num1 == len1) {
nums[m] = nums2[num2];
num2++;
continue;
}
if (num2 == len2) {
nums[m] = nums1[num1];
num1++;
continue;
}
if (nums1[num1] <= nums2[num2]) {
nums[m] = nums1[num1];
num1++;
continue;
}
if (nums1[num1] > nums2[num2]){
nums[m] = nums2[num2];
num2++;
continue;
}
}
if (len % 2 == 0)
return (nums[len / 2]+ nums[len / 2 - 1])/2.0;
else
return nums[len / 2];
}
};
Python :主要思路我觉得也相同,于是代码如下:
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
nums=[]
len1=len(nums1)
len2=len(nums2)
num1=num2=0
len0=len1+len2
for i in range(len0):
if(num1==len1):
nums.append(nums2[num2])
num2=num2+1
continue
if(num2==len2):
nums.append(nums1[num1])
num1=num1+1
continue
if(nums1[num1]<=nums2[num2]):
nums.append(nums1[num1])
num1=num1+1
continue
else:
nums.append(nums2[num2])
num2=num2+1
continue
if(len0%2==0):
return (nums[len0//2]+nums[len0//2-1])/2.0
else:
return nums[len0//2]