当前位置: 首页 > news >正文

C++算法:寻找两个正序数组的中位数

题目

寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 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

2023年3月13号的解法

class Solution {
public:
double findMedianSortedArrays(vector& nums1, vector& nums2) {
const int Len = nums1.size() + nums2.size();
const int iAvg1 = Rec(nums1.data(), nums1.data() + nums1.size(), nums2.data(), nums2.data() + nums2.size(), (Len - 1) / 2);
if (Len & 1)
{
return iAvg1;
}
const int iAvg2 = Rec(nums1.data(), nums1.data() + nums1.size(), nums2.data(), nums2.data() + nums2.size(), (Len - 1) / 2+1);
return (iAvg1 + iAvg2) / 2.0;
}
int Rec(int* b1, int* e1, int* b2, int* e2, int iFindIndex)
{
if (b1 == e1)
{
return b2[iFindIndex];
}
if (b2 == e2)
{
return b1[iFindIndex];
}
if (0 == iFindIndex)
{
return min(*b1, *b2);
}
int k = (iFindIndex + 1) / 2;
const int index1 = min(k - 1,(int)( e1 - b1)-1);
const int index2 = min(k - 1, (int)(e2 - b2 )- 1);
if (b1[index1] < b2[index2])
{
return Rec(b1 + index1 + 1, e1, b2, e2, iFindIndex - index1 - 1);
}
return Rec(b1, e1, b2 + index2 + 1, e2, iFindIndex - index2 - 1);
}
};

2023年8月6号的解法

class Solution {
public:
double findMedianSortedArrays(vector& nums1, vector& nums2) {
m_c = nums1.size() + nums2.size();
m_iHalf = m_c / 2;
int left = 0, r = min(m_iHalf, (int)nums1.size()) + 1;//左闭右开
while (r > left + 1)
{
const auto mid = left + (r - left) / 2;
const int leftLen2 = m_iHalf - mid;
const int iRet = Cmp(mid, leftLen2, nums1, nums2);
if (0 == iRet)
{
break;
}
else if (iRet < 0)
{
r = mid;
}
else
{
left = mid;
}
}
if (m_dRet < 0 )
{
Cmp(left,m_iHalf-left,nums1,nums2);
}
return m_dRet;
}
int Cmp(int leftLen1, int leftLen2, const vector& nums1, const vector& nums2)
{
if (leftLen2 > nums2.size())
{
return 1;
}
int iLeftMax = INT_MIN;
if (leftLen1 > 0)
{
iLeftMax = max(iLeftMax, nums1[leftLen1 - 1]);
}
if (leftLen2 > 0)
{
iLeftMax = max(iLeftMax, nums2[leftLen2 - 1]);
}
int iRightMin = INT_MAX;
if (leftLen1 < nums1.size())
{
iRightMin = min(iRightMin, nums1[leftLen1]);
}
if (leftLen2 < nums2.size())
{
iRightMin = min(iRightMin, nums2[leftLen2]);
}
if (iLeftMax <= iRightMin)
{
if (1 & m_c)
{
m_dRet = iRightMin;
}
else
{
m_dRet = (iLeftMax + iRightMin) / 2.0;
}
return 0;
}
if ((leftLen1 > 0) && (nums1[leftLen1 - 1] > iRightMin))
{
return-1;
}
return 1;
}
double m_dRet=-1;
int m_c;
int m_iHalf;
};

其它

视频课程

如果你觉得复杂,想从简单的算法开始,可以学习我的视频课程。
https://edu.csdn.net/course/detail/38771
我的其它课程
https://edu.csdn.net/lecturer/6176

测试环境

win7 VS2019 C++17

相关下载

doc版文档,排版好
https://download.csdn.net/download/he_zhidan/88348653

相关文章:

C++算法:寻找两个正序数组的中位数

题目 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输…...

2.1 关系数据结构及形式化定义

思维导图&#xff1a; 2.1.1 关系 笔记&#xff1a; 关系数据库模型是一个简单但强大的方式来表示数据及其之间的关系。下面是这节的关键内容&#xff1a; - **关系模型核心概念** * 关系数据模型的核心是“关系”&#xff0c;它在逻辑上表现为一个二维表。 * 此表中&a…...

“揭秘淘宝店铺所有商品接口:一键获取海量热销宝贝信息!“

淘宝店铺所有商品接口可以通过shop id或店铺主链接获取到整店商品&#xff0c;数据包括&#xff1a;商品ID&#xff0c;图片地址&#xff0c;店铺标题&#xff0c;优惠价&#xff0c;价格&#xff0c;销量&#xff0c;宝贝链接等整个店铺的商品。 要使用这个接口&#xff0c;需…...

跟着播客学英语-Why I use vim ? part two

在上一期作者讲到了他使用 Vim 的主要原因是提高效率&#xff0c;不需要再去使用鼠标&#xff0c;今天我们继续上次未听完的内容&#xff1a; if you type Vi, thats going to be alias to Vim anyway by default theres, not really a good reason for you to use vi that I c…...

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程&#xff1f; 可以让设备中的程序&#xff0c;与网络上其他设备中的程序进行数据交互&#xff0c;从而实现网络通信的手段&#xff0c;java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式&#xff1a;CS架构…...

k8s集群的简单搭建

K8S简单集群搭建 前提条件 windos11电脑&#xff0c;内存16g以上安装vmware虚拟机软件安装三个centos7虚拟机&#xff0c;分配硬盘40g,内存4g,CPU4核心网络均采用NAT模式&#xff08;新建虚拟机默认的模式&#xff09; centos7镜像下载&#xff1a;https://mirrors.tuna.tsi…...

语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆

文章目录 mask图像介绍步骤代码 mask图像介绍 根据 mask 图像来画分割对象的外接椭圆是一种常见的图像分割任务。Mask 图像通常是一个二值图像&#xff0c;其中包含了感兴趣对象的像素。通常情况下&#xff0c;白色像素表示对象&#xff0c;黑色像素表示背景。 步骤 以下是一…...

Nosql redis高可用和持久化

Nosql redis高可用和持久化 1、redis高可用2、redis持久化2.1redis持久化2.2Redis 持久化方法2.3RDB 持久化2.3.1RDB持久化工作原理2.3.2触发条件2.3.3其他自动触发机制2.3.4执行流程2.3.5启动时加载 2.4AOF 持久化2.4.1AOF持久化原理2.4.2开启AOF2.4.3执行流程2.4.4文件重写的…...

软件工程(1、2;5~7小测参考答案)

目录 软件工程第1、2章小测 需求工程第5-7章小测 软件工程第1、2章小测 一 单项选择题(12分) 1、下列关于软件开发的描述不正确的是()。(1分) 软件是独立于计算机硬件的一部分,但它又依赖于计算机硬件。 软件既是一种复杂的逻辑实体,又是一种工具。 软件的核心是程序,…...

服务器存储面临的两大难题

服务器存储面临的两大难题 服务器存储为核心的IT系统承受着业务发展带来的巨大压力: 随着业务发展&#xff0c;IT应用数量不断增多&#xff0c;当前数据中心的IT基础设施愈加复杂&#xff0c;服务器、存储等设备的数量不断增加。服务器与存储管理更加复杂:随着业务应用对IT基础…...

Blind Signature盲签名与fabric区块链结合的应用

盲签名的概念 首先由 David Chaum 于1982年提出&#xff0c;盲签名实现了签名者对发送者的消息进行签名&#xff0c;却不能知道签名者消息的具体内容。 相当于将文件放入信封&#xff0c;签名者在信封上对文件进行签名&#xff0c;而不知道具体的文件内容。 盲签名的实现方式…...

ueditor

下载文件 文档 UEditor入门部署 入门部署和体验 1.1 下载编辑器 到官网下载 UEditor 最新版&#xff1a;http://ueditor.baidu.com/website/download.html#ueditor 1.2 创建demo文件 解压下载的包&#xff0c;在解压后的目录创建 demo.html 文件&#xff0c;填入下面的…...

2023年台州市第三届网络安全技能大赛(MISC)—Black Mamba

前言&#xff1a;当时比赛没有做出来现在来复现一下 就当记录一下&#xff08;这个思路没想到&#xff09; Black Mamba&#xff1a; 一张图片 常规得分离&#xff0c;属性&#xff0c;LSB&#xff0c;盲水印等都尝试过 无果&#xff01; 考点&#xff1a;异或解密&#xff0…...

这道面试题工作中经常碰到,但 99% 的程序员都答不上来

小时候都被问过一个脑筋急转弯&#xff0c;把大象放进冰箱有几个步骤&#xff1f;我们一开始都会抓耳挠腮&#xff0c;去想着该如何把大象塞进冰箱。最终揭晓的答案却根本不关心具体的操作方法&#xff0c;只是提供了 3 个步骤组成的流程&#xff0c;「把冰箱打开&#xff0c;把…...

Linux安装单机PostgreSQL15.4

1. 联网rpm安装 1.1.关闭服务 ## 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service ## 关闭 selinux cat /etc/selinux/config SELINUXdisabled1.2.安装yum源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-…...

最新 SpringCloud微服务技术栈实战教程 微服务保护 分布式事务 课后练习等

SpringCloud微服务技术栈实战教程&#xff0c;涵盖springcloud微服务架构Nacos配置中心分布式服务等 SpringCloud及SpringCloudAlibaba是目前最流行的微服务技术栈。但大家学习起来的感受就是组件很多&#xff0c;不知道该如何应用。这套《微服务实战课》从一个单体项目入手&am…...

Docker搭建MySQL8.0主从复制(一主一从)

0. 配置说明 宿主机使用的版本为19045的win10专业版&#xff0c;MySQL使用的是8.0&#xff0c;Docker容器使用Linux。 1. 安装Docker Desktop 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能&#xff0c;CMD中运行&#xff1a; “Docker Desktop Installe…...

40V汽车级P沟道MOSFET SQ4401EY-T1_GE3 工作原理、特性参数、封装形式—节省PCB空间,更可靠

AEC-Q101车规认证是一种基于失效机制的分立半导体应用测试认证规范。它是为了确保在汽车领域使用的分立半导体器件能够在严苛的环境条件下正常运行和长期可靠性而制定的。AEC-Q101认证包括一系列的失效机制和应力测试&#xff0c;以验证器件在高温、湿度、振动等恶劣条件下的可…...

记录在搭建Jenkins时,所遇到的坑,以及解决方案

项目场景&#xff1a; 记录在搭建Jenkins时,所遇到的坑,以及解决方案.问题描述1 在使用Jenkins构建时,报错如下&#xff1a; cp: cannot stat /project/xx/xxxx/dist/: No such file or directory Build step Execute shell marked build as failure Finished: FAILURE解决方…...

二极管“天马行空”的作用,你知道吗?

网友&#xff1a;二极管怎么有这么多种类呀&#xff1f; 工程师&#xff1a;二极管可以说除了电阻电容外用的比较多的一种元器件&#xff0c;起到的作用多着呢 那么二极管都可以起到哪些作用呢&#xff1a; 一、防反作用&#xff0c;主回路中串联一个二极管&#xff0c;是利用…...

Z-Image-Turbo-rinaiqiao-huiyewunv参数详解:Turbo模型推荐步数/CFG/精度配置原理剖析

Z-Image-Turbo-rinaiqiao-huiyewunv参数详解&#xff1a;Turbo模型推荐步数/CFG/精度配置原理剖析 1. 引言&#xff1a;为什么你的AI绘图效果总是不理想&#xff1f; 如果你用过一些AI绘图工具&#xff0c;可能会遇到这样的问题&#xff1a;生成的图片要么模糊不清&#xff0…...

让幻想更真实:Kook Zimage真实幻想Turbo负面提示词使用指南

让幻想更真实&#xff1a;Kook Zimage真实幻想Turbo负面提示词使用指南 1. 为什么负面提示词如此重要 在AI图像生成领域&#xff0c;我们常常把注意力放在如何写好正面提示词上&#xff0c;却忽略了负面提示词的重要性。负面提示词就像一位隐形的编辑&#xff0c;默默剔除那些…...

MogFace模型Python入门实战:调用API完成第一个人脸检测程序

MogFace模型Python入门实战&#xff1a;调用API完成第一个人脸检测程序 你是不是也对AI人脸检测感到好奇&#xff0c;想亲手写个程序试试&#xff1f;今天&#xff0c;我们就来一起动手&#xff0c;用Python写一个最简单的程序&#xff0c;调用MogFace模型来检测图片里的人脸。…...

Transformer解码器实战:用PyTorch手写Masked Self-Attention(附避坑指南)

Transformer解码器实战&#xff1a;用PyTorch手写Masked Self-Attention&#xff08;附避坑指南&#xff09; 1. 为什么需要Masked Self-Attention 在文本生成任务中&#xff0c;模型需要遵循自回归特性——即生成当前词时只能依赖已生成的词。想象你正在玩文字接龙游戏&#x…...

虚幻引擎PicoVR开发避坑指南:PicoXR与PicoOpenXR插件选型与实战解析

1. PicoXR与PicoOpenXR插件核心差异解析 第一次接触PicoVR开发时&#xff0c;很多开发者都会被两个相似的插件名称搞懵——PicoXR和PicoOpenXR。这两个插件虽然名字相近&#xff0c;但在功能特性和适用场景上存在本质区别。我在去年开发健身类VR应用时就因为选错插件&#xff0…...

探索含简易撬棒电路crowbar的双馈风机Simulink仿真模型

【含有简易撬棒电路crowbar的双馈风机simulink仿真模型】 含过电压保护电路的双馈风机模型。 此模型中的撬棍&#xff08;crowbar&#xff09;不是使用 IGBT 或理想开关构建的。 通过改变转子侧变换器的参考电压&#xff0c;对撬棒电路的切入和切出进行建模。 控制策略是最常见…...

5大核心功能解析:MAA_Punish如何实现《战双帕弥什》全自动游戏体验

5大核心功能解析&#xff1a;MAA_Punish如何实现《战双帕弥什》全自动游戏体验 【免费下载链接】MAA_Punish 战双帕弥什每日任务自动化 | Assistant For Punishing Gray Raven 项目地址: https://gitcode.com/gh_mirrors/ma/MAA_Punish MAA_Punish是一款专为《战双帕弥什…...

前端国际化:别让你的应用只懂一种语言

前端国际化&#xff1a;别让你的应用只懂一种语言 毒舌时刻这应用写得跟方言似的&#xff0c;出了本地就没人懂。各位前端同行&#xff0c;咱们今天聊聊前端国际化。别告诉我你的应用还只有中文版本&#xff0c;那感觉就像在国际会议上只说方言——能说&#xff0c;但没人懂。 …...

ncmdumpGUI+解决网易云音乐NCM文件跨设备播放痛点

ncmdumpGUI解决网易云音乐NCM文件跨设备播放痛点 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 问题场景&#xff1a;被加密的音乐自由 想象这样的场景&…...

Kylin V10 SP1桌面美化全攻略:从默认主题到个性化定制,让你的麒麟系统焕然一新

Kylin V10 SP1桌面美学革命&#xff1a;打造高效与美感兼具的麒麟系统工作空间 第一次打开Kylin V10 SP1系统时&#xff0c;那个默认的"寻光"主题确实给人一种清新简洁的感觉。但日复一日面对相同的界面&#xff0c;就像每天穿着同样的衣服上班——功能上没问题&…...