内容纲要
题目
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
注意:算法的时间复杂度应该为 O(log (m+n)) 。
提示
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- (-10)的六次方 <= nums1[i], nums2[i] <= (10)的六次方
思路
第一个思路必然是暴力求解,一次通过,代码如下。
/**
* @author: LoungeXi
**/
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
List<Integer> list = new ArrayList<>();
// 向集合中添加两个数组的元素
for (int i = 0; i < nums1.length; i++) {
list.add(nums1[i]);
}
for (int i = 0; i < nums2.length; i++) {
list.add(nums2[i]);
}
// 定义排序方法 排序集合
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
double result = 0.0;
// 获得中位数
if (list.size() % 2 == 0) {
result = ((double) list.get(list.size() / 2) + (double) list.get(list.size() / 2 - 1)) / 2;
} else {
result = (double) list.get(list.size() / 2);
}
return result;
}
}