1. 题目
给两个有序数组,找出数组归并后的中位数。
小技巧
设arr1 长度为 n,arr2 长度为 m。
k1 = (n + m + 1) / 2 - 1; // 减1 是因为数组下标从 0 开始
k2 = (n + m + 2) / 2 - 1;
则两个数组归并排序后的中位数是:(k1+k2) / 2.0
2. 暴力解
归并两个数组,再找。
时间复杂度:O(M+N)
空间复杂度:O(M+N)
package leetCode.findMedianSortedArrays;
/**
* 暴力法:
* 归并两数组,再找中位数
* 时复:O(M+N)
* 空复:O(M+N)
*/
public class FindMedian_violence {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
int[] help = new int[n + m];
int i = 0, j = 0, count = 0;
//merge
while (i < n && j < m) {
if (nums1[i] <= nums2[j]) {
help[count++] = nums1[i++];
} else {
help[count++] = nums2[j++];
}