题目描述:找出两个有序数组的中位数,两个有序数组不同时为空。
题目链接:Leetcode 4. Median of Two Sorted Arrays
这个是就是归并排序归并的部分,很经典。利用外部排序先得出结果,然后再求中位数,当然下面开一个新的那么大的数组是没有必要的。
代码如下
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int l1 = nums1.length;
int l2 = nums2.length;
int[] ans = new int[l1 + l2];
boolean flag = true;// 默认加一位
if (((l1 + l2) & 1) != 0) {//奇数
flag = false; //是否加一
}
int idx1 = 0, idx2 = 0, index = 0;
while (idx1 < l1 && idx2 < l2) {
if (nums1[idx1] < nums2[idx2]) {
ans[index++] = nums1[idx1++]; // 添加后右移
} else {
ans[index++] = nums2[idx2++];
}
}
while (idx1 < l1) {
ans[index++] = nums1[idx1++]; //处理结尾
}
while (idx2 < l2) {
ans[index++] = nums2[idx2++];
}
int median = (l1 + l2 - 1) / 2;
if (flag == true) {
double result = (ans[median] + ans[median + 1]) / 2.0;
return result;
} else {
return ans[median];
}
}
}