一、归并排序办法实现

//工夫复杂度O(m+n), 空间复杂度O(m+n)var findMedianSortedArrays = function(nums1, nums2) {    let nums = [], m = nums1.length, n = nums2.length;    if(m === 0) {   //nums1为空数组        if(n % 2 === 0) {   //nums2的长度为偶数            return (nums2[n/2 - 1] + nums2[n/2])/2;        } else {            return nums2[Math.floor(n/2)];        }    }    if(n === 0) {   //nums2为空数组        if(m % 2 === 0) {   //nums1的长度为偶数            return (nums1[m/2 - 1] + nums1[m/2])/2;        } else {            return nums1[Math.floor(m/2)];        }    }    let count = 0, i = 0, j = 0;        //count代表合并后的数组的长度, i, j别离代表遍历nums1, nums2的索引    while(count !== (m + n)) {        if(i === m) {       //nums1曾经遍历实现            while(j !== n) {                nums[count++] = nums2[j++];            }            break;        }        if(j === n) {       //nums2曾经遍历完            while(i !== m) {                nums[count++] = nums1[i++];            }            break;        }        //这样能够保障合并后的数组是有序的        if(nums1[i] < nums2[j]) {            nums[count++] = nums1[i++];        } else {            nums[count++] = nums2[j++];        }    }    if(count % 2 === 0) {       //合并后的数组的元素个数是偶数        return (nums[count/2 - 1] + nums[count/2])/2;    } else {        return nums[Math.floor(count/2)];    }};console.log(findMedianSortedArrays([0, 1, 2, 2, 3], [3, 4, 5]));

二、数组连贯后排序实现

//工夫复杂度O(m+n), 空间复杂度O(m+n)var findMedianSortedArrays = function(nums1, nums2) {    let length1 = nums1.length;    let length2 = nums2.length;    let middle = (length1 + length2 - 1)/2;    var nums = nums1.concat(nums2).sort();    if(Math.floor(middle) === middle) {     //如果middle是一个整数        return nums[middle];    } else {        //如果middle不是一个整数        return (nums[Math.floor(middle)] + nums[Math.ceil(middle)])/2;    }};console.log(findMedianSortedArrays([0, 1, 2, 2, 3], [3, 4, 5]));

三、双指针法实现

//工夫复杂度O(m+n), 空间复杂度O(1)/** * 双指针法:如果两个数组的和为偶数的话,则需遍历len/2 + 1次, 如果为奇数,则需遍历Math.floor(len/2) + 1次, * 应用prev和current来别离记录上一轮循环和该轮循环的值 * @param {Array} nums1  * @param {Array} nums2  */var findMedianSortedArrays = function(nums1, nums2) {    let m = nums1.length, n = nums2.length, len = m + n;    let prev = -1, current = -1, aStart = 0, bStart = 0;    //prev保留上一轮循环的后果,current保留以后循环的后果,aStart示意nums1的指针,bStart示意nums2的指针     for(let i = 0; i <= len/2; i++) {        prev = current;         //prev指向上一轮循环的值        //nums1指针向后移的条件: aStart < m 且 nums1[aStart] < nums2[bStart],然而第二个条件的前提条件是nums2的指针不能越界        if(aStart < m && (bStart >= n || nums1[aStart] < nums2[bStart])) {            current = nums1[aStart++];        } else {            current = nums2[bStart++];        }    }    if(len % 2 === 0) {        return (prev + current)/2;    } else {        return current;    }};console.log(findMedianSortedArrays([0, 1, 2, 3], [3, 4, 5]));