给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例 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示例 3: 输入:nums1 = [0,0], nums2 = [0,0] 输出:0.00000
示例 4: 输入:nums1 = [], nums2 = [1] 输出:1.00000
示例 5: 输入:nums1 = [2], nums2 = [] 输出:2.00000
提示: nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
题解:思考良久,还是决定将数组合并再sort,有兴趣的可以研究下进阶,代码如下:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
int num = m + n;
int[] nums3 = new int[num];
for(int i = 0;i < m;i++){
nums3[i] = nums1[i];
}
for(int j = 0;j < n;j++){
nums3[m++] = nums2[j];
}
int temp;
for(int i = 0; i < num;i++){
for(int j = i;j < num;j++ ){
if(nums3[i] > nums3[j]){
temp = nums3[i];
nums3[i] = nums3[j];
nums3[j] = temp;
}
}
}
double midle = 0;
if(num % 2 == 0) midle = ((double)nums3[num/2] +(double)nums3[num/2 - 1]) / 2;
else if(num % 2 == 1) midle = nums3[(num-1) / 2];
return midle;
}
}
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays