力扣 题目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 }
View Code

 

posted @ 2022-08-05 18:09  无聊的阿库娅  阅读(15)  评论(0编辑  收藏  举报