There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
题意
有两个排序好的数组nums1 & nums2.找到这两个数组的中位数。
思路
令sum等于两个数组大小的和。
如果sum==1,返回这个数。
否则,如果sum是偶数,返回这两个数组中 第sum/2大 的数 和 第sum/2+1大 的数的均值;
如果sum是奇数,返回这两个数组中第sum/2+1大 的数。
1 double find(int* nums1, int nums1Size, int* nums2, int nums2Size,int t){ //返回两个数组中第t小的数 2 int pos1=0,pos2=0; 3 int ans; 4 while(t--) 5 { 6 if(pos1<nums1Size && pos2<nums2Size) 7 { 8 if(nums1[pos1]>nums2[pos2]) 9 ans=nums2[pos2++]; 10 else 11 ans=nums1[pos1++]; 12 } 13 else if(pos1<nums1Size) 14 ans=nums1[pos1++]; 15 else if(pos2<nums2Size) 16 ans=nums2[pos2++]; 17 } 18 return ans; 19 } 20 double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { 21 int sum=nums1Size+nums2Size; 22 if(sum == 1) 23 { 24 if(nums1Size == 1) 25 return nums1[0]; 26 else return nums2[0]; 27 } 28 else 29 { 30 if(sum%2==0) 31 return (find(nums1,nums1Size,nums2,nums2Size,sum/2)+find(nums1,nums1Size,nums2,nums2Size,sum/2+1))/2; 32 else 33 return find(nums1,nums1Size,nums2,nums2Size,sum/2+1); 34 } 35 }
时间: 2024-10-25 20:27:20