寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

代码:

double findMedianSortedArrays(vector& nums1, vector& nums2) 

    {

        vector total;

        int i = nums1.size();

        int j = nums2.size();

        while (i && j)

        {

            if (nums1[i - 1] > nums2[j - 1])

            {

                total.push_back(nums1[i - 1]);

                nums1.pop_back();

                i--;

                continue;

            }

            if (nums1[i - 1] < nums2[j - 1])

            {

                total.push_back(nums2[j - 1]);

                nums2.pop_back();

                j--;

                continue;

            }

            if (nums1[i - 1] == nums2[j - 1])

            {

                total.push_back(nums1[i - 1]);

                nums1.pop_back();

                i--;

                total.push_back(nums2[j - 1]);

                nums2.pop_back();

                j--;

                continue;

            }

        }

        while (i)

        {

            total.push_back(nums1[i - 1]);

            nums1.pop_back();

            i--;

        }

        while (j)

        {

            total.push_back(nums2[j - 1]);

            nums2.pop_back();

            j--;

        }

        int nSize = total.size();

        if (nSize % 2 == 0)

        {

            return (total[nSize / 2] + total[nSize / 2 - 1]) / 2.0;

        }

        else

        {

            int nTmp = nSize / 2;

            return total[nTmp];

        }

    }

你可能感兴趣的:(LeetCode刷题记录,c++,算法)