【Leetcode】4. 寻找两个有序数组的中位数C++(双指针法)

在这里插入图片描述

在这里插入图片描述

/*
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。
*/

#include "iostream"
#include "vector"

using namespace std;

class Solution
{
public:
    void print(vector<int> &nums)
    {
        for (int i = 0; i < nums.size(); i++)
        {
            cout << nums[i] << " ";
        }
        cout << endl;
    }
    double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
    {
        int l1 = 0, l2 = 0, r1 = nums1.size(), r2 = nums2.size();
        vector<int> sorted;

        while (l1 < r1 && l2 < r2)
        {
            if (nums1[l1] < nums2[l2])
            {
                sorted.push_back(nums1[l1++]);
            }
            else
            {
                sorted.push_back(nums2[l2++]);
            }
        }

        while (l1 < r1)
        {
            sorted.push_back(nums1[l1++]);
        }

        while (l2 < r2)
        {
            sorted.push_back(nums2[l2++]);
        }

        int s = r1 + r2;
        double ans;

        if (s % 2 == 1)
        {
            ans = sorted[s / 2];
        }
        else
        {
            ans = double(sorted[s / 2] + sorted[s / 2 - 1]) / 2;
        }
        return ans;
    }
};

int main(void)
{
    vector<int> nums1, nums2;
    int num;
    double median;
    Solution S;

    // 输入nums1
    while (true)
    {
        cin >> num;
        nums1.push_back(num);
        if (cin.get() == '\n')
            break;
    }

    //输入nums2
    while (true)
    {
        cin >> num;
        nums2.push_back(num);
        if (cin.get() == '\n')
            break;
    }

    median = S.findMedianSortedArrays(nums1, nums2);
    cout << median << endl;

    return 0;
}
发布了65 篇原创文章 · 获赞 121 · 访问量 9070

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/104059580