题目:
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
- 示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0 - 示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
思路:
将数组元素合并到list,对list排序取中间元素
方法:
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
double result;
// 将两个数组元素装进list
List list =new ArrayList<>();
for (int i : nums1) {
list.add(i);
}
for (int i : nums2) {
list.add(i);
}
// 对list元素排序
List collect = list.stream().sorted().collect(Collectors.toList());
// 判断list元素个数是奇数还是偶数,奇数直接取中间元素,偶数取中间两元素取平均值
int size = collect.size();
if (size %2 ==0) {
int a = collect.get(size /2 -1);
int b = collect.get(size /2);
result = (a + b) /2.0;
}else {
int index = (size +1) /2 -1;
result = collect.get(index);
}
return result;
}