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)).
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
题目意思是找到两个已排序数组的中位数,算法时间复杂度不能大于O(log (m+n)),我猜是循环次数要少于m+n?我也不清楚哈哈
我的思路:如果num1Size+num2Size为奇数,则中位数为两个数组合并排序后最中间那个数,如果是偶数则中位数为最中间两个数的平均数
然后指定i,和j分别为两个数组的开始下标,如果nums1[i]<nums2[j]则i++,反之则j++
这样就能找出两个数组中(num1Size+num2Size+1)/2个数就是中位数(奇数的情况),偶数的情况也一样。(貌似这叫归并问题吧?)
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { if(nums1Size>nums2Size){ return findMedianSortedArrays(nums2, nums2Size, nums1, nums1Size); } int i = 0, j = 0, count = 0, sign = 0; int a; if((nums1Size+nums2Size)%2) { if(nums1Size == 0){ return nums2[(nums2Size-1)/2]; } while(count!=(nums1Size+nums2Size+1)/2) { if(i==nums1Size || nums1[i]>nums2[j]) { j++; count++; sign = 1; }else{ i++; count++; sign = 0; } } return sign?nums2[j-1]:nums1[i-1]; } else { if(nums1Size == 0){ return (nums2[nums2Size/2]+nums2[nums2Size/2-1])/2.0; } while(count!=(nums1Size+nums2Size)/2) { if(i==nums1Size || nums1[i]>nums2[j]) { j++; count++; sign = 1; }else{ i++; count++; sign = 0; } } a = sign?nums2[j-1]:nums1[i-1]; if(i == nums1Size || j == nums2Size) { return j==nums2Size?(a+nums1[i])/2.0:(a+nums2[j])/2.0; }else{ return nums1[i]<nums2[j]?(a+nums1[i])/2.0:(a+nums2[j])/2.0; } } }