给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n))
。
示例 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
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
解题思路:
创建一个新数组,将num1和num2中元素存进去,用Arrays的sort方法进行自动排序,若数组长度为奇数输出中间的那位数,若为偶数,输出中间两数的平均数。
解题代码:
class Solution {
public double findMedianSortedArrays(int[] num1, int[] num2) {
int[] num = new int[num1.length + num2.length];
for (int i = 0; i < num1.length; i++)
num[i] = num1[i];
for (int i = 0; i < num2.length; i++)
num[num1.length + i] = num2[i];
Arrays.sort(num);
if (num.length % 2 != 0)
return num[(num.length - 1) / 2];
else return (num[num.length / 2] + num[num.length / 2 - 1] + 0.0) / 2;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
String[] str1 = s1.split(",");
String[] str2 = s2.split(",");
int[] num1 = new int[str1.length];
int[] num2 = new int[str2.length];
for (int i = 0; i < str1.length; i++)
num1[i] = Integer.parseInt(str1[i]);
for (int i = 0; i < str2.length; i++)
num2[i] = Integer.parseInt(str2[i]);
Solution su = new Solution();
double result = su.findMedianSortedArrays(num1, num2);
System.out.println(result);
}
}
运行结果: