leetcode挨个儿刷150430(6):Median of Two Sorted Arrays

今天这道题在Leetcode标注的是hard,但是我觉得超级简单。很可能是自己的思路还有问题,或者复杂度还有问题吧。不过目前是满足题目要求了。后续还需要思考一下,怎么样继续优化它。加油。

题目内容:

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)).

题目描述:

找出两个已经排好序的vector的中位数。所谓的中位数是指:如果数组数目是奇数的话,就是中间的那个;如果是偶数的话,就是中间两个的平均值。

坑(自己私下认为的)

1,返回值是double型的,处理时要注意;

2,时间复杂度题目上有要求哈。所以不要连接两个vector,再排序。那样的话,就不符合题目要求啦。

3,边界条件需要注意。

自己的思路:

合并两个有序的vector到一个,然后依据奇偶特性取中位数。这个复杂度主要花在合并上,时间和空间的复杂度都为O(m+n)。

代码如下所示,在Leetcode上AC了的。

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        vector<int> total_nums;
        int nums1_size = nums1.size();
        int nums2_size = nums2.size();
        if((nums1_size <= 0) && (nums2_size <= 0))
            return 0;
        int p = 0;//nums1的index
        int q = 0;//nums2的index
        int i = 0;//total_nums的index
        //以下,完成有序数组的合并
        for(; i < nums1_size + nums2_size;i++)
        {
            if((p >= nums1_size)||(q >= nums2_size))
                break;
            if(nums1[p] <= nums2[q])
            {
                total_nums.push_back(nums1[p]);
                p++;
            }
            else
            {
                total_nums.push_back(nums2[q]);
                q++;
            }
        }
         if(p >= nums1_size)
         {
             while(q < nums2_size)
             {
                 total_nums.push_back(nums2[q]);
                 q++;
             }
         }
        else if(q >= nums2_size)
         {
             while(p < nums1_size)
             {
                 total_nums.push_back(nums1[p]);
                 p++;
             }
         }
         int total_nums_size = total_nums.size();
         //判断是奇还是偶
         if(total_nums_size%2 == 0)
         {
             return (double)(total_nums[total_nums_size / 2 - 1] + total_nums[total_nums_size / 2]) / 2.0;
         }
         else
         {
             return total_nums[total_nums_size / 2];
         }
    }    
};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值