1. 程式人生 > >leetCode- Median of Two Sorted Arrays

leetCode- Median of Two Sorted Arrays

兩個有序陣列的中位數

Median of Two Sorted Arrays

題意:
給定兩個有序陣列 nums1 和nums2 ,陣列大小分別為m、n;

找出這兩個有序陣列的中位數。 時間複雜度在O(log (m+n)).

nums1 和nums2不全為空。
舉個栗子:
nums1 = [1, 3]
nums2 = [2]
中位數: 2.0

菜鳥的我的做法:
從頭到尾同時掃描nums1和nums2,假設nums1和nums2合併為一個數組,則新陣列的長度為L=(nums1+nums2),
中位數所在位置為L/2,故將nums1和nums2合併為一個有序陣列只需合併到中位數所在位置的長度即可。
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    let l1=nums1.length;
    let l2=nums2.length;
    let midPos=parseInt((l1+l2)/2);
    let nums3=new Array((midPos+5));
    let mid=0,p1=0,p2=0,median=0;
    while(mid<=
midPos){ //合併到中位數所在位置長度即可 if(p1<l1&&p2<l2){//當Nums1和nums2都沒有到達陣列尾部 if(nums1[p1]<nums2[p2]){ nums3[mid++]=nums1[p1++]; } else if(nums1[p1]>nums2[p2]){ nums3[mid++]=nums2[p2++]; } else if(nums1[p1]==nums2[p2]){ nums3[mid++]=
nums1[p1++]; if(mid<=midPos){ nums3[mid++]=nums2[p2++]; } } } else if(p1<l1){ nums3[mid++]=nums1[p1++]; } //p1未到尾部,而p2到了 else if(p2<l2){ nums3[mid++]=nums2[p2++]; } //p2未到尾部,而p1到了 } if((l1+l2)%2!=0){ median=nums3[mid-1];} //求中位數 else { median=(nums3[mid-1]+nums3[mid-2])/2; } return median; };