力扣 题目4- 寻找两个正序数组的中位数
题目
题解
遍历(nums1size + nums2size) / 2 + 1次 nums1与nums2比较谁小取谁 放入vector
最后根据i与vector 容器的关系返回
我们实际上最多只需要最后遍历的两次 所以可以加入特殊判断 节省空间
代码
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 7 int nums1size = nums1.size(); 8 int nums2size = nums2.size(); 9 int nums1foreach=0; 10 int nums2foreach = 0; 11 int i = 1; 12 int er = (nums1size+ nums2size)%2==0?1:0; 13 int zhongwei = (nums1size + nums2size) / 2 + 1; 14 int low = 0; 15 vector<int> zhong = {}; 16 for (; i <= zhongwei; i++) { 17 if (nums2foreach<nums2size&&(nums1foreach>= nums1size||nums1[nums1foreach]> nums2[nums2foreach])) { 18 low = nums2[nums2foreach]; 19 nums2foreach++; 20 } 21 else 22 { 23 low = nums1[nums1foreach]; 24 nums1foreach++; 25 } 26 27 if (i== zhongwei-1|| i == zhongwei) { 28 zhong.push_back(low); 29 } 30 } 31 return er? (zhong[0]+ zhong[1])/2.0: zhong.back()*1.0; 32 } 33 }; 34 35 int main() { 36 Solution sol; 37 vector<int> nums1 = {1,2}; 38 vector<int> nums2 = {}; 39 double result =sol.findMedianSortedArrays(nums1, nums2); 40 cout << result << endl; 41 }