给定两个大小分别为 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 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.*;
public class 寻找两个正序数组的中位数 {
public static void main(String[] args) {
int[] nums1 = new int[]{1,2};
int[] nums2 = new int[]{3,4};
double medianSortedArrays = findMedianSortedArrays(nums1, nums2);
System.out.println(medianSortedArrays);
}
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
// List list = new ArrayList<>();
// for (int value : nums1) {
// list.add(value);
// }
// for (int i : nums2) {
// list.add(i);
// }
// Collections.sort(list);
// Integer[] arr = new Integer[list.size()];
// Integer[] integers = list.toArray(arr);
// if(integers.length == 1) {
// return integers[0];
// }
int[] arr = new int[nums1.length + nums2.length];
int count = 0;
for (int value : nums1) {
arr[count++] = value;
}
for (int value : nums2) {
arr[count++] = value;
}
if(arr.length == 1) {
return arr[0];
}
Arrays.sort(arr);
int end = arr.length - 1;
int start = 0;
while (end != start && end >= start) {
end--;
start++;
}
return (arr[end] + arr[start]) / 2.0;
}
}
解题思路
首先要将两个数组合并为一个数组,利用双指针的思想,找出中间的位置
小结
一开始使用list集合是想到不知道数组的大小,没法创建一个新的数组,自己傻了,哈哈哈,不过也从中学到了list的一些方法内容。
对list集合排序Collections.sort(list);,将list变为数组Integer[] arr = new Integer[list.size()]; Integer[] integers = list.toArray(arr);,不能是int类型,最后在返回数据是,一开始是/2,这样是错的,应该/2.0
虽然时间内存都不是很高,不过能写出来也算可以了,哈哈哈!



