算法描述:
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)).
You may assume nums1 and nums2 cannot be both empty.
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
解题思路:利用二分法将两个数组分别分割,当数组分割结果的所有左边的值小于右边的值,则表示找到对应的值。
double findMedianSortedArrays(vector & nums1, vector & nums2) { if(nums1.size() > nums2.size()) return findMedianSortedArrays(nums2, nums1); int m = nums1.size(); int n = nums2.size(); int left = 0; int right = m; while(left <= right){ int partitionX = (left + right) /2; int partitionY = (m+n+1)/2 - partitionX; int maxLeftX = (partitionX==0) ? INT_MIN : nums1[partitionX-1]; int minRightX = (partitionX == m) ? INT_MAX : nums1[partitionX]; int maxLeftY = (partitionY ==0) ? INT_MIN : nums2[partitionY-1]; int minRightY = (partitionY == n) ? INT_MAX : nums2[partitionY]; if(maxLeftX <= minRightY && maxLeftY <= minRightX){ if((m+n)%2==0) return (double)(min(minRightY,minRightX)+max(maxLeftX, maxLeftY))/2; else return (double) max(maxLeftX, maxLeftY); } else if(maxLeftX > minRightY) right = partitionX - 1; else left = partitionX + 1; } return -1; }