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

举报
海轰Pro 发表于 2022/08/31 14:31:28 2022/08/31
【摘要】 4. 寻找两个正序数组的中位数题目给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:...

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

题目

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


示例 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


示例 3:

输入:nums1 = [0,0], nums2 = [0,0]

输出:0.00000


示例 4:

输入:nums1 = [], nums2 = [1]

输出:1.00000


示例 5:

输入:nums1 = [2], nums2 = []

输出:2.00000

 

提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106


进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

解答(C++)

方法一

思路:依据从小到大的顺序依次拼接为一个新的正序数组

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int m = nums1.size();
        int n = nums2.size();
        vector<int> a(m+n);
        int i = 0;
        int j = 0;
        int k = 0;
        while(i < m && j < n) {
            if(nums1[i] < nums2[j]) {
                a[k] = nums1[i];
                ++i;
            } else {
                a[k] = nums2[j];
                ++j;
            }
            ++k;
        }
        while(i < m) {
            a[k] = nums1[i];
            ++i;
            ++k;
        }
        while(j < n) {
            a[k] = nums2[j];
            ++j;
            ++k;
        }
        if((m+n)%2 == 1) return a[(m+n)/2];
        return double((a[(m+n)/2]+a[(m+n)/2-1])/2.0);
    }
};

解答(Python)

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。