美文网首页
leetCode 4. 寻找两个有序数组的中位数

leetCode 4. 寻找两个有序数组的中位数

作者: Chase_Eleven | 来源:发表于2019-05-28 16:51 被阅读0次

题目描述

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

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

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

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5


思考

这题难度标记为困难,其实不要被难度标记吓到了
读完题目会发现还是比较简单的,思路很清晰
把两个有序数组合成一个有序数组,然后取中位数就可以了,而且时间复杂度也不高只需要一次遍历
也可以在合并遍历的时候就拿到中位数


代码

class Solution {
    public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        vector<int> nums;
        int i = 0;
        int j = 0;
        for (; i < nums1.size(); i++) {
            bool addI = false;
            for (; j < nums2.size(); j++) {
                if (nums2[j] > nums1[i]) {
                    nums.push_back(nums1[i]);
                    addI = true;
                    break;
                }
                nums.push_back(nums2[j]);
            }
            if (!addI) {
                nums.push_back(nums1[i]);
            }
        }

        for (; j < nums2.size(); j++) {
            nums.push_back(nums2[j]);
        }

        if (nums.size() % 2 == 0) {
            return 1.0 * (nums[nums.size() / 2] + nums[nums.size() / 2 - 1]) / 2.0;
        } else {
            return nums[nums.size() / 2];
        }
    }
};

相关文章

网友评论

      本文标题:leetCode 4. 寻找两个有序数组的中位数

      本文链接:https://www.haomeiwen.com/subject/ssgdtctx.html