感觉这一题不难啊。用最常规的归并排序之后,找出中间的就行了。虽然不是最简单的方法,但一定是最方便的。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2){
vector<int> tmp(nums1.size() + nums2.size());
int i = 0, j = 0, k = 0;
while (i < nums1.size() && j < nums2.size())
if (nums1[i] <= nums2[j])
tmp[k++] = nums1[i++];
else
tmp[k++] = nums2[j++];
while (i < nums1.size())
tmp[k++] = nums1[i++];
while (j < nums2.size())
tmp[k++] = nums2[j++];
int center = tmp.size() / 2;
if (tmp.size() % 2)
return tmp[center];
else
return (double)(tmp[center] + tmp[center - 1]) / 2.0f;
}
};
对于已经排好序的,用归并排序复杂度是线性的:O(N)。