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

两个正序数组 找中位数_有一组已安排好序的数组原题连接给定两个大小分别为 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;
        }
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python表白代码大全简单-程序员python表白代码「建议收藏」

    python表白代码大全简单-程序员python表白代码「建议收藏」python表白代码源代码如下:#-*-coding:utf-8-*-importturtleimporttime#画爱心的顶部defLittleHeart():foriinrange(200):turtle.right(1)turtle.forward(2)#输入表白的语句,默认ILoveyoulove=input(‘请输入表白语句,默认为输入为"ILo…

  • mysql查找最后一条记录_mysql查询记录总数

    mysql查找最后一条记录_mysql查询记录总数首先要确定什么是最后一条。是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。SQL如下:selecta,bfromtablewherea&gt;’某个时间’orderbyadesclimit1(上面SQL中a为时间)。用max(time)查询方可!!…

  • XFF漏洞利用[通俗易懂]

    XFF漏洞利用[通俗易懂]作者:小刚一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢本实验仅用于信息防御教学,切勿用于其它用途XFF漏洞X-Forwarded-For(XFF)利用方式1.绕过服务器过滤2.XFF导致sql注入补充X-Forwarded-For(XFF)XFF是header请求头中的一个参数是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。代表了HTTP的请求端真实的IP。X-Forwarded-For:client1,proxy1,p.

  • java多线程系列(四)—ReentrantLock的使用

    java多线程系列(四)—ReentrantLock的使用

  • 适合于初学者—软路由全探索系列(一):探索 VMware 虚拟机旁路由安装及设置

    适合于初学者—软路由全探索系列(一):探索 VMware 虚拟机旁路由安装及设置软路由系列:VMware虚拟机旁路由配置全过程一、背景知识1、路由器2、软路由3、旁路由二、旁路由的网络配置及特性1、网络配置2、网络特性三、OpenWrt旁路由虚拟机安装1、安装准备一、背景知识1、路由器路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议。这样,路由器可以分析各种不同类型网络传来的数据包的

  • mac安装navicat 激活码【中文破解版】

    (mac安装navicat 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsaWN…

发表回复

您的电子邮箱地址不会被公开。

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