美文网首页
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