两个正序数组 找中位数_有一组已安排好序的数组

两个正序数组 找中位数_有一组已安排好序的数组原题连接给定两个大小分别为 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,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题连接
给定两个大小分别为 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)) 的算法解决此问题吗?
题解

题解连接
在这里插入图片描述

class Solution { 
   
public:
    int find(vector<int>&nums1,int begin1,vector<int>&nums2,int begin2,int k){ 
   
        if(nums1.size() - begin1 > nums2.size() - begin2)return find(nums2,begin2,nums1,begin1,k);
        int n = nums1.size() - begin1,m = nums2.size() - begin2;
        if(n <= 0)return nums2[begin2 + k - 1];
        if(k == 1)return min(nums1[begin1],nums2[begin2]);
        int a1 = min(k / 2,n);
        int a2 = k - a1;
        if(nums1[begin1 + a1 - 1] < nums2[begin2 + a2 - 1])return find(nums1,begin1 + a1,nums2,begin2,k - a1);
        else if(nums1[begin1 + a1 - 1] > nums2[begin2 + a2 - 1])return find(nums1,begin1,nums2,begin2 + a2,k - a2);
        else return nums1[begin1 + a1 - 1];
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 
   
        int n = nums1.size(),m = nums2.size();
        if((n + m) & 1)return (double)find(nums1,0,nums2,0,(n + m + 1) / 2);
        else{ 
   
            int a = find(nums1,0,nums2,0,(n + m) / 2);
            int b = find(nums1,0,nums2,0,(n + m) / 2 + 1);
            return (a + b) / 2.0;
        }
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169149.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言中void具体有什么作用

    C语言中void具体有什么作用1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因

    2022年5月19日
    40
  • 进口跨境电商erp系统_东南亚的电商平台

    进口跨境电商erp系统_东南亚的电商平台【上马ERP】专注东南亚本地电商市场,对接shopeeLazadatokopediaJD.idBilbilAkulaku等电商平台一套根据东南亚本地电商需求深度订制的ERP/WMS仓储系统!上马特色功能:【自动处理pickupGo-jek,Gosend,Grad订单】【自动打印快递面单】:美观、高效、准确、效率【自动更新平台订单】:结合仓库现有库存,自动更新平台库存,100%防止超卖;【智能化仓库管理】:智能生成拣货清单,高效准确管理仓库;【实时校验订…

    2022年9月20日
    3
  • 写好代码的10个秘密

    写好代码的10个秘密

    2021年8月9日
    57
  • protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现

    protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章1.何为序列化序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊…

    2022年6月2日
    63
  • pycharmpip升级失败_如何更新pip版本

    pycharmpip升级失败_如何更新pip版本更新pip版本出错查看pip的版本时提示需要更新执行更新出错打开文件管理找到当前虚拟环境下的lib下的site-packages文件删除pip-18.0.dist-info文件然后回到命令行执行python-mpipinstall–index-urlhttps://pypi.douban.com/simple–upgradepip即可完成pip的更新…

    2025年7月2日
    3
  • vs2015注册密钥

    vs2015注册密钥VisualStudioProfessional2015使用:HMGNV-WCYXV-X7G9W-YCX63-B98R2VisualStudioEnterprise2015使用:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV安装的版本不同,注册码不同。请对应地注册相关软件。…

    2022年8月22日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号