给定两个大小分别为 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
进阶: 你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
思路
想法比较常规,就是把nums1
和nums2
都扔到一个ArrayList
里,然后对这个ArrayList
排个序,排完序之后分别按照长度为偶数、奇数两种情况找出中位数即可。
代码
public class Solution {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
double answear;
for(int i=0;i<nums1.length;i++) {
arrayList.add(nums1[i]);
}
for(int i=0;i<nums2.length;i++) {
arrayList.add(nums2[i]);
}
Collections.sort(arrayList);
if(arrayList.size()%2==0) {
int index1 = arrayList.size()/2;
int index2 = index1-1;
double sum = (double)(arrayList.get(index1)+arrayList.get(index2));
answear = sum/2;
}
else {
int index = arrayList.size()/2;
answear = (double)arrayList.get(index);
}
return answear;
}
}