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

来源:互联网 发布:js input 选中 编辑:程序博客网 时间:2024/04/29 13:02

今天这道题在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
原创粉丝点击