#Leetcode# 4. Median of Two Sorted Arrays
https://leetcode.com/problems/median-of-two-sorted-arrays/
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
代码:
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<int> v; for(int i = 0; i < nums1.size(); i ++) v.push_back(nums1[i]); for(int i = 0; i < nums2.size(); i ++) v.push_back(nums2[i]); sort(v.begin(), v.end()); double ans = 0.0; if(v.size() % 2 == 0) ans = 1.0 * (v[v.size() / 2 - 1] + v[v.size() / 2 + 1 - 1]) / 2; else ans = 1.0 * v[(v.size() + 1) / 2 - 1]; return ans; } };
二分
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(), n = nums2.size(); if (m < n) return findMedianSortedArrays(nums2, nums1); if (n == 0) return ((double)nums1[(m - 1) / 2] + (double)nums1[m / 2]) / 2.0; int left = 0, right = n * 2; while (left <= right) { int mid2 = (left + right) / 2; int mid1 = m + n - mid2; double L1 = mid1 == 0 ? INT_MIN : nums1[(mid1 - 1) / 2]; double L2 = mid2 == 0 ? INT_MIN : nums2[(mid2 - 1) / 2]; double R1 = mid1 == m * 2 ? INT_MAX : nums1[mid1 / 2]; double R2 = mid2 == n * 2 ? INT_MAX : nums2[mid2 / 2]; if (L1 > R2) left = mid2 + 1; else if (L2 > R1) right = mid2 - 1; else return (max(L1, L2) + min(R1, R2)) / 2; } return -1; } };
第一道 hard 题目 嘻嘻嘻