题目链接
Median of Two Sorted Arrays - LeetCode
注意点
- 要考虑数组长度不一致的情况
解法
解法一:将两个数组合并成一个有序数组,根据数组长度分奇偶情况求中位数。时间复杂度为O(m+n)
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int i = 0;
int j = 0;
int nums1_len = nums1.size();
int nums2_len = nums2.size();
vector<int> nums;
while(i < nums1_len&& j < nums2_len)
{
if(nums1[i] < nums2[j])
{
nums.push_back(nums1[i]);
i++;
}
else
{
nums.push_back(nums2[j]);
j++;
}
}
while(i < nums1_len)
{
nums.push_back(nums1[i]);
i++;
}
while(j < nums2_len)
{
nums.push_back(nums2[j]);
j++;
}
int temp = nums.size();
for(int l = 0;l < temp;l++)
{
cout << nums[l];
}
if(temp%2==1)
{
return (nums[(temp-1)/2]);
}
else
{
return ((double)(nums[temp/2]+nums[temp/2-1])/2);
}
}
};
解法二:参考->leetcode之Median of Two Sorted Arrays问题
小结
- 复杂度为O(m+n)的方法十分简单,但是O(log(m+n))就没那么容易了,只想到要用二分法,但是要在两个数组之间用二分法还是挺麻烦的,所以应该是要对数字二分。并且求中位数转为求第K大的数字。