4. 寻找两个正序数组的中位数
难度困难
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1
和 nums2
。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1
和 nums2
不会同时为空。
示例 1:
nums1 = [1, 3] nums2 = [2] 则中位数是 2.0
示例 2:
nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5
思路:创建一个数组,大小为两个小数组的长度和,然后将两个小数组的所有数字存入,进行排序,根据数字的奇偶直接进行判断输出。
1 class Solution { 2 public: 3 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 4 int len3,len1=nums1.size(),len2=nums2.size(); 5 len3=len1+len2; 6 int a[len3],i,j; 7 for(i=0;i<len1;i++){ 8 a[i]=nums1[i]; 9 } 10 for(j=0;j<len2;j++,i++){ 11 a[i]=nums2[j]; 12 } 13 sort(a,a+len3); 14 if(len3%2==1){ 15 return a[len3/2]; 16 }else{ 17 return (a[len3/2]+a[len3/2-1])/2.0; 18 } 19 } 20 };