文章 评论 浏览 28
// 求有序数组中位数 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 }
文章 0 评论 0
接受
第 93 题:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log(m+n))。