对你的占有欲

文章 评论 浏览 28

对你的占有欲 2022-05-04 13:55:48
// 求有序数组中位数
function fm(){
  // let a1 = [1,2,3,4,5,6,7,8]
  // let a2 = [9,10,11,12,13,14,15,16,17]
  let a1 = [2,3,4,5,6,7]
  let a2 = [1]
  let k = Math.ceil((a1.length+a2.length)/2) // 9
  let isOdd = (a1.length + a2.length)%2 === 1
  // 求第k小的数 
  function fun(arr1,arr2,z){
    if(z === 1){
      if(isOdd){
        if(!arr1.length){
          return arr2[z-1]
        }
        if(!arr2.length){
          return arr1[z-1]
        } 
        return arr1[z-1] > arr2[z-1] ? arr2[z-1] : arr1[z-1]
      }else{
        if(!arr1.length){
          return (arr2[z-1] + arr2[z]) / 2
        }
        if(!arr2.length){
          return (arr1[z-1] + arr1[z]) / 2
        }
        let _arr = arr1.slice(0,2).concat(arr2.slice(0,2)).sort((a,b)=>{
          return a - b
        })
        return (_arr[0] + _arr[1]) / 2
      }
    }
    
    let idx = Math.floor(z/2)
    if(arr1.length !== 0){
      idx = arr1[idx-1] === undefined ? arr1.length : idx
    }
    if(arr2.length!==0 ){
      idx = arr2[idx-1] === undefined ? arr2.length : idx
    }
    if(arr2.length===0 || arr1[idx-1] <= arr2[idx-1]){
      arr1 = arr1.slice(idx)
    }else{
      arr2 = arr2.slice(idx)
    }
    z -= idx
    return fun(arr1,arr2,z)
  }
  let res = fun(a1,a2,k)
  return res
}

第 93 题:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log(m+n))。

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文