LeetCode

寻找两个有序数组的中位数

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);

上一篇下一篇

猜你喜欢

热点阅读