给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
冒泡算法
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len = nums1.length + nums2.length;
int[] nums3 = new int[len];
for (int i = 0; i < nums1.length; i++)
nums3[i] = nums1[i];
for (int i = nums1.length; i < nums1.length + nums2.length; i++) {
nums3[i] = nums2[i - nums1.length];
}
for (int i = 0; i < nums3.length - 1; i++) {
for (int j = 0; j < nums3.length - i - 1; j++) {
if (nums3[j] > nums3[j + 1]) {
int temp = nums3[j];
nums3[j] = nums3[j + 1];
nums3[j + 1] = temp;
}
}
}
if(len%2==0){
int sum=len/2;
double sum1=nums3[sum];
double sum2=nums3[sum-1];
double sum3=(sum1+sum2)/2;
return sum3;
}
else{
int sum=len/2;
double sum1=nums3[sum];
return sum1;
}
}
}
归并排序
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len = nums1.length + nums2.length;
int[] nums3;
if (nums1.length == 0) {
nums3 = nums2;
} else if (nums2.length == 0) {
nums3 = nums1;
} else {
nums3 = new int[len];
for (int i = 0, j = 0, k = 0; k < len; k++) {
if (i < nums1.length && j < nums2.length) {
if (nums1[i] <= nums2[j]) {
nums3[k] = nums1[i];
i++;
} else {
nums3[k] = nums2[j];
j++;
}
} else if (i < nums1.length) {
nums3[k] = nums1[i];
i++;
} else if (j < nums2.length) {
nums3[k] = nums2[j];
j++;
}
}
}
if(len%2==0){
int sum=len/2;
double sum1=nums3[sum];
double sum2=nums3[sum-1];
double sum3=(sum1+sum2)/2;
return sum3;
}
else{
int sum=len/2;
double sum1=nums3[sum];
return sum1;
}
}
思路:
定义一个数组,存放nums1和nums2的元素,然后使用冒泡排序对nums3的元素进行排序,最后取中间值即可。