题目:
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
解题思路:这道题要求两个良序数组的中位数,那么为了简单起见,我们可以将两个数组合并为一个数组,为了不需要考虑其中一个数组的元素已经全部加入新数组而导致的访问越界问题,我们考虑在两个数组后追加一个无穷的值作为标志值,这样我们就可以用一个简单的for循环把两个数组的原有元素全部加入到新数组而不需要考虑太多的情况,因为除非两个数组的原有元素已经全部加入到了新数组中,否则不可能会出现越界,而在两个数组都露出标志值之前,我们已经完成了数组的合并,此时只需要在新数组中找到中位数即可。
解答:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int> nums;
int n = nums1.size() + nums2.size() ;
int k = 0, j = 0;
nums1.push_back(INT_MAX);
nums2.push_back(INT_MAX);
for(int i = 0;i < n;i ++){
if(nums1[k] <= nums2[j]){
nums.push_back(nums1[k]);
k ++;
}
else{
nums.push_back(nums2[j]);
j ++;
}
}
int m = n / 2;
if(n %2 == 0){
double result = (nums[m-1] + nums[m])/2.0;
return result;
}
else{
double result = nums[m];
return result;
}
}
};