LeetCode 4.寻找两个正序数组的中位数

vector<int> mergevector(vector<int>& nums1, vector<int>& nums2)
    {
       auto p1 = nums1.begin(),p2 = nums2.begin();
       vector<int> vec;
       while(p1 != nums1.end() && p2 != nums2.end())
       {
           if(*p1 < *p2)
           {
               vec.push_back(*p1);
               p1++;
           }
           else
           {
               vec.push_back(*p2);
               p2++;
           }
       }
       if(p1 == nums1.end())
       {
           while(p2 != nums2.end())
           {
               vec.push_back(*p2);
               p2++;
           }
       }
       else
       {
           while(p1 != nums1.end())
           {
               vec.push_back(*p1);
               p1++;
           }
        }
       return vec; 
    }

mergeVector 函数

mergeVector 函数接收两个整数向量 nums1 和 nums2,并返回一个新的整数向量,其中包含 nums1 和 nums2 中的所有元素,且这些元素是排序的。该函数使用两个指针 p1 和 p2 分别遍历 nums1 和 nums2,每次将较小的元素添加到结果向量 vec 中,并移动相应的指针。当一个向量遍历完时,它将另一个向量中剩余的所有元素添加到结果向量中。

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int size = nums1.size() + nums2.size();
        vector<int> vec = mergevector(nums1,nums2);
        if(size % 2 == 1)
        {
            return double(vec[vec.size() / 2]);
        }
        return double(vec[vec.size() / 2] + vec[vec.size() / 2 - 1]) / 2;
    }

findMedianSortedArrays 函数

findMedianSortedArrays 函数接收两个已排序的整数向量 nums1 和 nums2,并返回它们的中位数。它首先计算两个向量的大小之和,然后调用 mergeVector 函数合并这两个向量并得到一个排序的向量 vec。接下来,它根据向量 vec 的大小计算中位数。

  • 如果 vec 的大小是奇数,则中位数是 vec 中间的元素。
  • 如果 vec 的大小是偶数,则中位数是 vec 中间两个元素的平均值。

mergeVector 函数的时间复杂度主要取决于两个指针 p1 和 p2 遍历 nums1 和 nums2 的过程。由于这两个指针同时向前移动,并且每个元素只会被访问和处理一次,因此这个过程的时间复杂度是线性的,即 O(n + m),其中 n 是 nums1 的大小,m 是 nums2 的大小。

合并两个向量的操作(即 vec.push_back(*p1) 或 vec.push_back(*p2))也是线性时间复杂度,因为它涉及将元素添加到结果向量 vec 的末尾。然而,这个操作的时间复杂度通常被包含在 O(n + m) 中,因为它与指针的遍历过程紧密相关。

因此,mergeVector 函数的总时间复杂度是 O(n + m),其中 n 是 nums1 的大小,m 是 nums2 的大小。

由于 findMedianSortedArrays 函数只是调用了 mergeVector 并执行了一些常量时间的操作,它的时间复杂度也是 O(n + m),其中 n 和 m 分别是两个输入向量的大小。这是因为 mergeVector 的执行时间支配了整个 findMedianSortedArrays 函数的执行时间。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值