桃酥萝莉

文章 评论 浏览 31

桃酥萝莉 2022-05-04 13:55:48
// 一个O(n) 的解法,在排序的基础上做二路归并。
var num1 = [1, 2, 5, 7, 10];
var num2 = [3, 4, 5, 6, 8, 9];
console.log(findMedian(num1, num2));
function findMedian(arr1, arr2) {
	var arr = [];
	if (arr1[0] >= arr2[arr2.length - 1]) {
		arr = [...arr2, ...arr1];
	} else if (arr1[arr1.length - 1] <= arr2[0]) {
		arr = [...arr1, ...arr2];
	} else {
		var arr_i = 0;
		var arr1_i = 0;
		for (var arr2_i = 0; arr2_i < arr2.length; arr2_i ++) {
			if (arr1[arr1_i] < arr2[arr2_i]) {
				arr[arr_i] = arr1[arr1_i];
				arr_i ++;
				arr1_i ++;
				arr2_i --;
			} else {
				arr[arr_i] = arr2[arr2_i];
				arr_i ++;
			}
		}
		if (arr2_i == arr2.length) {
			for (var i = arr1_i; i < arr1.length; i ++) {
				arr[arr_i] = arr1[i];
				arr_i ++;
			}
		} else {
			for (var i = arr2_i; i < arr2.length; i ++) {
				arr[arr_i] = arr2[i];
				arr_i ++;
			}
		}
	}
	if (arr.length % 2 == 0) {
		return (arr[Math.floor((arr.length - 1) / 2)] + arr[Math.floor(arr.length / 2)]) / 2;
	} else {
		return arr[Math.floor(arr.length / 2)];
	}
}

第 93 题:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log(m+n))。

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文