美文网首页LeetCode
寻找两个有序数组的中位数

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

作者: 谭瞎 | 来源:发表于2019-03-15 18:05 被阅读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);
    
    

    相关文章

      网友评论

        本文标题:寻找两个有序数组的中位数

        本文链接:https://www.haomeiwen.com/subject/ydvrmqtx.html