给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例 :
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
思路:合并之后排序,再找中位数; 但是要注意int与double类型转换的问题。
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int>nums; //存储nums1和nums2的合并数组
for(int i=0; i<nums1.size(); i++)
nums.push_back(nums1[i]);
for(int j=0; j<nums2.size(); j++)
nums.push_back(nums2[j]);
sort(nums.begin(), nums.end()); //对合并数组进行排序
int len = nums.size(); //获取合并数组的长度
if(0 == len) //长度为0,说明为空,输出0.00000
return 0.00000;
if(len%2 == 0) //长度为偶数,返回值是中间两数的平均数,
return (double)(nums[len/2-1] + nums[len/2])/2; //此处前面要加double,若不加double,比如2和3的平均数计算出来就是2而不是2.5
else //长度为奇数,返回值就是中间那个。返回值自动是double类型。
return nums[len/2];
}
网友评论