寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入: nums1 = [1,3], nums2 = [2] 输出: 2.00000 解释: 合并数组 = [1,2,3] ,中位数 2
示例 2:
输入: nums1 = [1,2], nums2 = [3,4] 输出: 2.50000 解释: 合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- -106 <= nums1[i], nums2[i] <= 106
我的代码:
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { // 首先按照归并排序的方法 对两个数字进行合并 vector<int> nums3; int i = 0, j = 0; while(i < nums1.size() && j < nums2.size()) { if(nums1[i] < nums2[j]) nums3.push_back(nums1[i ++]); else nums3.push_back(nums2[j ++]); } while(i < nums1.size()) nums3.push_back(nums1[i ++]); while(j < nums2.size()) nums3.push_back(nums2[j ++]); double res = 0; if(nums3.size() % 2 == 1) res = nums3[nums3.size() / 2]; else { // 这里需要注意的是对于size为偶数的情况 是需要-1的 // 因为数组下标从0开始 int t = nums3.size() - 1; res = (nums3[t / 2] + nums3[t / 2 + 1]) / 2.0; } return res; } };