给定两个大小分别为 m m m 和 n n n的正序(从小到大)数组 n u m s 1 nums1 nums1 和 n u m s 2 nums2 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O ( l o g ( m + n ) ) O(log (m+n)) O(log(m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
n
u
m
s
1.
l
e
n
g
t
h
=
=
m
nums1.length == m
nums1.length==m
n
u
m
s
2.
l
e
n
g
t
h
=
=
n
nums2.length == n
nums2.length==n
0
<
=
m
<
=
1000
0 <= m <= 1000
0<=m<=1000
0
<
=
n
<
=
1000
0 <= n <= 1000
0<=n<=1000
1
<
=
m
+
n
<
=
2000
1 <= m + n <= 2000
1<=m+n<=2000
−
1
0
6
<
=
n
u
m
s
1
[
i
]
,
n
u
m
s
2
[
i
]
<
=
1
0
6
-10^{6} <= nums1[i], nums2[i] <= 10^{6}
−106<=nums1[i],nums2[i]<=106文章来源:https://www.toymoban.com/news/detail-436723.html
题解
在此本人采用一种时间复杂度较高的算法,即先将两个数组合并,再排序,最后输出中位数。文章来源地址https://www.toymoban.com/news/detail-436723.html
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
//合并数组
for(int i = 0;i < nums2.size();i++)
{
nums1.push_back(nums2[i]);
}
//排序
sort(nums1.begin(),nums1.end());
double t = nums1[nums1.size() / 2];
//如果是奇数个
if(nums1.size() & 1)
{
return t;
}
t = nums1[nums1.size() / 2 - 1] + nums1[nums1.size() / 2];
return t / 2;
}
};
到了这里,关于4---寻找两个正序数组的中位数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!