给定两个大小分别为 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

O(m+n)复杂度的方法

class Solution {
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int l1 = 0, l2 = 0, mid1, mid2;int r1 = nums1.size() - 1, r2 = nums2.size() - 1;int total = nums1.size() + nums2.size();bool is_odd = total % 2;int mid = total / 2;double result = 0.0;// 如果 nums1 为空if (nums1.empty()) {if (nums2.empty()) return 0.0; // 两个都空if (is_odd) return nums2[mid];return (nums2[mid - 1] + nums2[mid]) / 2.0;}// 如果 nums2 为空if (nums2.empty()) {if (is_odd) return nums1[mid];return (nums1[mid - 1] + nums1[mid]) / 2.0;}// 合并两个数组(直接模拟合并直到中位数)int i = 0, j = 0, count = 0;int prev = 0, curr = 0;while (count <= mid) {prev = curr;if (i < nums1.size() && (j >= nums2.size() || nums1[i] <= nums2[j])) {curr = nums1[i++];} else {curr = nums2[j++];}count++;}if (is_odd) return curr;return (prev + curr) / 2.0;}
};

O(LogMin(M,N))的方法

class Solution {
public:int getKthElement(const vector<int>& nums1, const vector<int>& nums2, int k) {int index1 = 0, index2 = 0;int n1 = nums1.size(), n2 = nums2.size();while (true) {// 特殊情况:nums1已经用完了if (index1 == n1) return nums2[index2 + k - 1];if (index2 == n2) return nums1[index1 + k - 1];// 如果只要第1小的数,直接比较两边头部if (k == 1) return min(nums1[index1], nums2[index2]);// 正常处理int half = k / 2;// 计算每个数组跳多少步int newIndex1 = min(index1 + half, n1) - 1;int newIndex2 = min(index2 + half, n2) - 1;int pivot1 = nums1[newIndex1];int pivot2 = nums2[newIndex2];// 谁的 pivot 小,谁的前面都不可能是第k小,全部丢掉if (pivot1 <= pivot2) {k -= (newIndex1 - index1 + 1);index1 = newIndex1 + 1;} else {k -= (newIndex2 - index2 + 1);index2 = newIndex2 + 1;}}}double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int total = nums1.size() + nums2.size();// 奇数情况,找第 (n/2 + 1) 小if (total % 2 == 1) {return getKthElement(nums1, nums2, total / 2 + 1);} // 偶数情况,取中间两个平均else {return (getKthElement(nums1, nums2, total / 2) +getKthElement(nums1, nums2, total / 2 + 1)) / 2.0;}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88341.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88341.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88341.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Expected Sarsa 算法的数学原理

&#x1f31f; 一、Expected Sarsa 算法的数学原理 1. 什么是 Expected Sarsa&#xff1f; Expected Sarsa 是一种基于 时序差分&#xff08;Temporal Difference, TD&#xff09;学习 的强化学习算法&#xff0c;用于估计 动作值函数 ( q_{\pi}(s, a) )。它是 Sarsa 算法的一种…

Vue的watch和React的useEffect

参考文章&#xff1a;https://zhuanlan.zhihu.com/p/686329898

idea中合并git分支

1.把本地dev代码合并到本地master代码在提交代码之前&#xff0c;先确保dev和master都拉取了最新的代码都进行了Git->pull了这时候确保Local的第一个分支是master分支&#xff0c;然后选择dev分支 ,鼠标右键-》Merge dev into master这时候会提示 有合并到本地master最新的代…

《Spring 中上下文传递的那些事儿》Part 7:异步任务上下文丢失问题详解

&#x1f4dd; Part 7&#xff1a;异步任务上下文丢失问题详解 在现代 Java 应用中&#xff0c;异步编程已经成为提升性能、解耦业务逻辑的重要手段。无论是使用 CompletableFuture、线程池&#xff08;ExecutorService&#xff09;、定时任务&#xff08;ScheduledExecutorSe…

大语言模型驱动智能语音应答:技术演进与架构革新

在智能客服、电话银行等场景中&#xff0c;用户时常遇到这样的困境&#xff1a;“请描述您的问题...抱歉没听清&#xff0c;请重试...正在为您转接人工”。传统语音应答&#xff08;IVR&#xff09;系统受限于规则引擎与浅层语义理解&#xff0c;难以应对复杂多变的自然语言表达…

【Linux】内存管理

要求&#xff1a;1、编写程序&#xff0c;实现如下功能。&#xff08;1&#xff09;随机生成 1000000 个 0~1 之间的数&#xff1b;&#xff08;2&#xff09;统计分析这些数据&#xff0c;计算均值、方差和分布情况&#xff0c;分布情况按0.01 的步长进行统计&#xff1b;&…

苍穹外卖—day1

文章目录前言一、接口文档导入与生成二、前端环境搭建三、后端环境搭建1. 了解项目结构2. 环境搭建常见问题总结前言 &#xff08;简要说明笔记的目的&#xff1a;记录搭建过程、关键配置和结构理解&#xff09; 一、接口文档导入与生成 Apifox 导入 使用工具&#xff1a;https…

基于微信小程序的在线疫苗预约小程序源码+论文

基于微信小程序的在线疫苗预约系统源码论文代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》800套 《SSM网站项目》1200套 《小程序项目》600套…

Windows 11 安装过程中跳过微软账户创建本地账户

背景 在 Windows 11 的安装和设置过程中&#xff0c;Microsoft 账号登录是默认的认证方式。然而&#xff0c;在某些情况下&#xff0c;可能需要绕过此步骤以创建本地账户。 微软在 2025 年 3 月推送的 Windows 11 预览版&#xff08;Build 26120.3653 和 Build 26200.5516&am…

利用DBeaver实现异构数据库数据定时任务同步

1、背景 本需求需要实现抽取KingBaseEs数据库的某几张表数据&#xff0c;定时同步到MySQL中 2、工具准备 2.1 DBeaverEE25.1(必须要企业版&#xff0c;如果用社区版没有定时任务功能) https://dbeaver.io/download/ 2.2 KingBaseEs数据库及驱动 https://www.kingbase.com…

【TCP/IP】1. 概述

1. 概述1. 概述1.1 因特网及技术催生新时代1.1.1 信息化时代1.1.2 关键技术1.1.3 国家战略1.2 网络互联的动机和技术1.2.1 网络互联的动机1.2.2 网络互联技术1.3 因特网的形成和发展1.3.1 国际因特网发展轨迹1.3.2 中国互联网发展1.4 有关因特网的组织机构1.5 请求注解&#xf…

中老年人的陪伴,猫咪与机器人玩具有什么区别?

在人口结构深度老龄化的背景下&#xff0c;中老年群体的精神需求与情感陪伴已成为重要的社会议题。猫咪作为活生生的伴侣动物&#xff0c;与日新月异的智能陪伴机器人&#xff0c;代表了两种截然不同的情感慰藉路径——前者承载着生命互动的温度与责任&#xff0c;后者则彰显了…

day11-微服务面试篇

微服务在面试时被问到的内容相对较少&#xff0c;常见的面试题如下&#xff1a;SpringCloud有哪些常用组件&#xff1f;分别是什么作用&#xff1f;服务注册发现的基本流程是怎样的&#xff1f;Eureka和Nacos有哪些区别&#xff1f;Nacos的分级存储模型是什么意思&#xff1f;R…

昇腾 k8s vnpu配置

参考文档: https://www.hiascend.com/document/detail/zh/mindx-dl/500/AVI/cpaug/cpaug_018.html 此文档实现为NPU910B3卡 主机设置静态虚拟npu 设置虚拟化模式 &#xff01;本命令只支持再物理机执行&#xff0c;取值为0或1&#xff0c;&#xff08;如果是在虚拟机内划分vNPU…

Redis常用数据结构以及多并发场景下的使用分析:Set类型

文章目录前言redis中的set结构疑问1 &#xff1a;为什么使用数组后 整体时间复杂度还是O(1)疑问2&#xff1a; set特性是无序的那为什么当元素少的时候 用连续数组 去存储呢&#xff1f;疑问3&#xff1a;当元素少于512的时候即使用intset存储的时候 是如何维护唯一性的&#x…

Linux中rw-rw-r--相关的访问权限讲解

下面就是关于 rw-rw-r-- 的知识图谱式讲解。核心节点&#xff1a;rw-rw-r-- (文件权限表示法) 这是一个在 Linux/Unix 操作系统中&#xff0c;通过 ls -l 命令查看到的&#xff0c;用于描述文件或目录访问权限的10字符字符串。分支一&#xff1a;字符串的解剖 (Anatomy of the …

C#异常处理:更优雅的方式

C#异常处理&#xff1a;更优雅的方式 在 C# 编程的世界里&#xff0c;异常处理是绕不开的重要环节。程序运行时难免会出现各种意外&#xff0c;若处理不当&#xff0c;可能导致程序崩溃&#xff0c;给用户带来糟糕体验。所以&#xff0c;掌握更优雅的异常处理方式&#xff0c;对…

Qt6中模态与非模态对话框区别

一.阻塞 vs 非阻塞1.模态对话框阻塞父窗口&#xff1a;打开后&#xff0c;用户必须先处理该对话框&#xff08;关闭或完成操作&#xff09;&#xff0c;才能继续操作父窗口。应用场景&#xff1a;强制用户立即响应的场景&#xff0c;如确认对话框、登录窗口、文件选择器等。2.非…

处理Web请求路径参数

目录 1. 路径变量&#xff08;Path Variable&#xff09; 2. 查询参数&#xff08;Query Parameter&#xff09; 3. 表单参数&#xff08;Form Data&#xff09; 4. 请求体JSON参数&#xff08;Request Body JSON&#xff09; 5. 请求头参数&#xff08;Header Parameters&…

创客匠人:技术赋能下的创始人 IP 打造与内容创作新逻辑

在知识变现的浪潮中&#xff0c;创始人 IP 的核心竞争力始终围绕内容展开&#xff0c;但内容创作的效率与质量往往成为瓶颈。创客匠人基于对行业的深刻洞察&#xff0c;探索出技术与内容融合的路径&#xff0c;为创始人 IP 打造提供了新的思路 —— 不再将内容创作视为单纯的输…