Mickey's Blog ·

【leetCode】两个数组的中值(方案1代码留存)

/**

*/

var findMedianSortedArrays = function(nums1, nums2) {

let count,target,now1,now2,answer,flag;

count = nums1.length+nums2.length

if(count%2===0){

    answer = [];

    target = [count/2-1,count/2];

    now1 = nums1.length%2===0?nums1.length/2-1:Math.ceil(nums1.length/2)-1;

    now2 = nums2.length%2===0?nums2.length/2-1:Math.ceil(nums2.length/2)-1;

    while(1){

        if(answer.length===1){



        }else if(answer.length===2){

               answer = (answer[0]+answer[1])/2;

               break;

        }else{



        }

    }

}else{

    answer = 0;

    target = Math.ceil(count/2)-1;

    now1 = nums1.length%2===0?nums1.length/2-1:Math.floor(nums1.length/2);

    now2 = nums2.length%2===0?nums2.length/2-1:Math.floor(nums2.length/2);

    while(1){

        if(nums1[now1]<nums2[now2]){//中值对比

            if(flag===1){break;}

            flag = -1;

        }else{

            if(flag===-1){break;}

            flag = 1;

        }

        if(nums1[now1-flag]===undefined){

            now2 = now2+flag

        }else if(nums2[now2+flag]===undefined){

            now1 = now1-flag

        }else{

            if(now1+now2===target-1){

               now2 = now2+flag

            }else if(now1+now2===target-2){

               now1 = now1-flag

            }

        }



    }

    if(now1+now2+1 ===target && ){

          answer = nums1[now1]>nums2[now2]?nums1[now1]:nums2[now2];

          break;

        }





}

/*

首先进行中值比对,在维持对比的两个数下标和为target-1 或target-2的范围内的情况下

进行移动,直到找到某个数在另一数组中的位置,然后根据这个数的位置,推测target是2数组的下一位,还是1数组的下一位

*/

       /*

       取短数组的中位数,去另一数组获取插入位置,通过插入位置向target排序

       获取插入位置可以使用二分查找

       */

console.log(target,now1,now2,count,answer);

return answer;

};