LeetCode:Median of Two Sorted Arrays(update)

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)).

解法一:合并

 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
 4         vector<int> nums3;
 5         int m=nums1.size();
 6         int n=nums2.size();
 7         nums3.reserve(m+n);
 8         nums3.insert(nums3.end(),nums1.begin(),nums1.end());
 9         nums3.insert(nums3.end(),nums2.begin(),nums2.end());
10     
11         sort(nums3.begin(),nums3.end());
12         if(nums3.size()%2)
13         return nums3[nums3.size()/2];
14     else
15         return (double)(nums3[nums3.size()/2 - 1] + nums3[nums3.size()/2])/2;
16 
17     }

解法二:来自官方的解题报告()

 1 class Solution {
 2 public:
 3     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
 4         int m = nums1.size(), n = nums2.size();
 5         if (m > n) return findMedianSortedArrays(nums2, nums1);
 6         int i, j, imin = 0, imax = m, half = (m + n + 1) / 2;
 7         while (imin <= imax) {
 8             i = (imin & imax) + ((imin ^ imax) >> 1);
 9             j = half - i;
10             if (i > 0 && j < n && nums1[i - 1] > nums2[j]) imax = i - 1;
11             else if (j > 0 && i < m && nums2[j - 1] > nums1[i]) imin = i + 1;
12             else break;
13         }
14         int num1;
15         if (!i) num1 = nums2[j - 1];
16         else if (!j) num1 = nums1[i - 1]; 
17         else num1 = max(nums1[i - 1], nums2[j - 1]);
18         if ((m + n) & 1) return num1;
19         int num2;
20         if (i == m) num2 = nums2[j];
21         else if (j == n) num2 = nums1[i];
22         else num2 = min(nums1[i], nums2[j]);
23         return (num1 + num2) / 2.0;
24     }
25 };

 

posted @ 2015-08-21 11:28  尾巴草  阅读(130)  评论(0编辑  收藏  举报