4. 寻找两个有序数组的中位数
解法1:比较容易想到的办法,由于对时间复杂都有一定的要求,空间换时间。新建一个新的数组,将两个数组有序插入到新的数组中。最终如果时奇数个的话直接返回新数字的中间数,偶数的话返回数组中间两个数的平均数。
执行用时 : 11 ms, 97.73%。内存消耗 : 46.1 MB, 97.20% 。
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; //记录nums1,nums2,nums的下标。 int index1=0,index2=0,index=0; int[] nums = new int[len1+len2]; //将nums1,2有序插入到nums中 while(index1<len1 && index2<len2 &&index<=len){ nums[index++]=nums1[index1]<nums2[index2]?nums1[index1++]:nums2[index2++]; } //连个if用于其中一个数组插入完毕,剩余数组继续插入。 if(index1!=len1){ while(index1<len1) nums[index++]=nums1[index1++]; } if(index2!=len2){ while(index2<len2) nums[index++]=nums2[index2++]; } //为奇数直接返回中间数,#注意,此时index并非数组下标,因为插入完毕后执行了index++, //index是数组长度 if(index%2!=0) return nums[index/2]; //为偶数时 return ((double)(nums[index/2-1]+nums[index/2]))/2; } }