leetCode- Median of Two Sorted Arrays
阿新 • • 發佈:2018-12-15
兩個有序陣列的中位數
題意: 給定兩個有序陣列 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;
};