寻找两个有序数组的中位数
2019-03-15 本文已影响0人
谭瞎
数组篇
寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
代码:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function (nums1, nums2) {
let index;
let median;
// 拼接 两个数组
let newArr = nums1.concat(nums2);
// 若拼接后的个数为0则中断
if (newArr.length === 0) {
return;
}
// 数组排序
sort(newArr);
// 根据奇偶来求中位数
if (newArr.length % 2 === 1) {
index = parseInt(newArr.length / 2);
median = newArr[index];
} else {
index = parseInt(newArr.length / 2);
median = (newArr[index] + newArr[index - 1]) / 2;
}
// 保留一位小数
return median.toFixed(1);
};
let sort = function (arr) {
for (var j = 0; j < arr.length - 1; j++) {
// 两两比较,如果前一个比后一个大,则交换位置。
for (var i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
};
var nums1 = [];
var nums2 = [1.0];
findMedianSortedArrays(nums1, nums2);