Java表示出寻找两个数组的中位数
时间: 2023-05-13 20:06:43 浏览: 97
可以使用归并排序的思想,将两个数组合并成一个有序数组,然后根据数组长度的奇偶性来确定中位数的位置,最后返回中位数即可。以下是Java代码实现:
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
int[] merged = new int[m + n];
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
merged[k++] = nums1[i++];
} else {
merged[k++] = nums2[j++];
}
}
while (i < m) {
merged[k++] = nums1[i++];
}
while (j < n) {
merged[k++] = nums2[j++];
}
if ((m + n) % 2 == 0) {
return (merged[(m + n) / 2 - 1] + merged[(m + n) / 2]) / 2.0;
} else {
return merged[(m + n) / 2];
}
}
相关问题
寻找两个正序数组的中位数,java代码
以下是一个用 Java 语言实现寻找两个正序数组的中位数的例子:
```
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int len = m + n;
int[] sorted = new int[len];
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] < nums2[j]) {
sorted[k++] = nums1[i++];
} else {
sorted[k++] = nums2[j++];
}
}
while (i < m) {
sorted[k++] = nums1[i++];
}
while (j < n) {
sorted[k++] = nums2[j++];
}
if (len % 2 == 0) {
return (double) (sorted[len / 2 - 1] + sorted[len / 2]) / 2;
} else {
return (double) sorted[len / 2];
}
}
}
```
这个算法的基本思路是将两个数组合并成一个有序数组,然后通过数组长度的奇偶性来判断中位数的位置,并计算中位数的值。具体实现中,使用三个指针分别指向两个数组和合并后的数组的当前位置,不断比较两个数组当前位置的值,将较小的值加入合并后的数组。最后再根据合并后的数组的长度计算中位数的值。
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你用JAVA编写一段代码找出并返回这两个正序数组的中位数 。
可以使用Arrays.sort()方法来排序数组,然后使用Math.max()和Math.min()方法来比较两个数组中的最大值和最小值。之后使用if语句来判断两个数组的大小,并计算中位数(如果两个数组的总大小是偶数,那么取出两个数组的中间数字的均值作为中位数;如果两个数组的总大小是奇数,那么取出两个数组的中间数字作为中位数)。
阅读全文