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

算法的时间复杂度应该为 O(log (m+n)) 。

示例:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

解题思路:
详细的题解请参见https://leetcode.cn/problems/median-of-two-sorted-arrays/solutions/2950686/tu-jie-xun-xu-jian-jin-cong-shuang-zhi-z-p2gd

下面是我对题解的一些理解,我使用的是闭区间的写法:
这道题的难点就在于时间复杂度要求,就限制了不能用遍历来找到中位数。
中位数也就是有序数组中排在中间位置的数,换句话说中位数把有序数组分成了两部分,两部分的元素个数相同(如果数组元素个数是奇数,则让左边部分比右边部分多一个),并且左边部分的所有元素都比右边部分的所有元素小(即是左边部分的最大值都小于右边部分的最小值)。

既然我们知道了m和n,自然也就知道了左边部分和右边部分的元素个数(m + n + 1)/ 2,那么假设左边部分中的元素是由nums1中的i个元素+nums2中的j个元素组成,且i + j == (m + n + 1)/ 2,所以我们如果知道了i,自然也就知道了j,也就得到了左边部分的元素和右边部分的元素,也就是一种划分情况,枚举i的个数,也就得到不同的左右部分划分情况,其中只有一个划分情况能够满足左边部分的最大值小于右边部分的最小值,此时也就找到了中位数,如果数组元素个数是奇数,中位数=左边部分的最大值,如果是偶数,则中位数=(左边部分最大值 + 右边部分最小值)/ 2。

满足条件的划分是唯一的,并且此时的 i 是满足nums1[i] <= nums2[j + 1]的最大值,而这个i我们可以通过二分的方法来查找。

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {// 1、如果nums1的长度大于nums2,则交换if(nums1.length > nums2.length){int[] temp = nums1;nums1 = nums2;nums2 = temp;}// 2、二分寻找最大满足nums1[i] < nums2[j + 1]int m = nums1.length, n = nums2.length;int left = 0, right = m - 1;while(left <= right){int i = left + (right - left) / 2;int j = (m + n + 1) / 2 - (i + 1) - 1;if(nums1[i] < nums2[j + 1]){left = i + 1;}else{right = i - 1;}}int i = right;int j = (m + n + 1) / 2 - (i + 1) - 1;int ai = i >= 0 ? nums1[i] : Integer.MIN_VALUE;int bj = j >= 0 ? nums2[j] : Integer.MIN_VALUE;int ai1 = (i + 1) < m ? nums1[i + 1] : Integer.MAX_VALUE;int bj1 = (j + 1) < n ? nums2[j + 1] : Integer.MAX_VALUE;int max1 = Math.max(ai, bj);int min2 = Math.min(ai1, bj1);return (m + n) % 2 > 0 ? max1 : (max1 + min2) / 2.0;}
}

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

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

相关文章

DeepSeek飞机大战小游戏HTML5(附源码)

用DeepSeek帮忙生成的飞机大战小游戏网页版&#xff0c;基于HTML5。 提示词prompt 帮我做一个网页版的飞机大战游戏 html5的游戏功能说明 玩家控制&#xff1a; 使用键盘方向键或WASD移动飞机 空格键发射子弹 移动设备支持触摸控制 游戏机制&#xff1a; 敌机会从屏幕顶部随机位…

全素山药开发指南:从防痒处理到高可用食谱架构

摘要&#xff1a;本文系统性解析山药的化学特性&#xff08;黏液蛋白/皂苷致痒机制&#xff09;及全素场景下的烹饪解决方案&#xff0c;提供6种高内聚低耦合的食谱实现&#xff0c;附完整防氧化与黏液控制技术方案。一、核心问题分析&#xff1a;山药处理中的“痛点”致痒物质…

OpenLayers 入门指南:序言

本专栏旨在帮助零GIS基础的开发人员系统掌握OpenLayers这一强大的开源Web地图库&#xff0c;通过 “理论实战” 结合的方式&#xff0c;逐步实现从创建地图到构建一个基础地图应用模版。无论你是前端开发者、GIS爱好者&#xff0c;都可以通过此专栏零基础开始用OpenLayers开发一…

WebRTC轻量学习 libdatachannel

最近想了解一些在浏览器中推送音视频流&#xff0c;寻找很多版本的代码&#xff0c;C、Go、Python等语言实现的webRTC协议。 按照搭建难度和快速实现首选Python版本的WebRTC&#xff0c;这种是最适合原型开发的。 选型&#xff1a;C的开源库libdatachannel Python的开源库Ai…

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

目录 一、什么是keep-alive&#xff1f; 与普通组件切换的对比 二、核心用法详解 1. 基础用法&#xff1a;动态组件缓存 2. 路由视图缓存 3. 生命周期钩子 三、进阶配置与优化 1. 精准控制缓存组件 &#xff08;1&#xff09;include/exclude属性 &#xff08;2&…

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…

Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动

Ethernet IP与Profinet共舞&#xff1a;驱动绿色工业的智慧脉动 光伏建筑一体化&#xff0c;建筑碳中和&#xff0c;在全球气候变化、国家碳达峰碳中和战略大背景下&#xff0c;敬畏生活、生产与自然和谐共处&#xff0c;确立自身资源循环高效利用的倒计时和路线图。 在全球气…

衡石科技破解指标管理技术难题:语义层建模如何实现业务与技术语言对齐?

在数字化转型的深水区&#xff0c;企业指标管理体系普遍面临一个核心矛盾&#xff1a;业务部门需要敏捷的数据洞察支撑决策&#xff0c;而IT部门却受困于复杂的数据架构和冗长的需求响应周期。这种矛盾的本质&#xff0c;是传统指标管理体系中“技术语言”与“业务语言”的割裂…

正品库拍照PWA应用的实现与性能优化|得物技术

一、 背景与难点 背景 目前得物ERP主要鉴别流程&#xff0c;是通过鉴别师鉴别提需到仓库&#xff0c;仓库库工去进行商品补图拍照&#xff0c;现有正品库59%的人力投入在线下商品借取/归还业务的操作端&#xff0c;目前&#xff0c;线下借取的方式会占用商品资源&#xff0c…

如何使用python识别出文件夹中全是图片合成的的PDF,并将其移动到指定文件夹

引言 在现代数字化工作流程中&#xff0c;无论是为机器学习模型处理数据&#xff0c;还是进行数字归档&#xff0c;区分原生文本 PDF&#xff08;例如&#xff0c;由文字处理器生成的报告&#xff09;和基于图像的 PDF&#xff08;例如&#xff0c;扫描的发票、档案文件&#…

淘系怎么做?

首先&#xff0c;要明确一点就是&#xff0c;补单不是“刷/单”&#xff0c;补单是为了给买家营造一个良好的购物氛围&#xff0c;毕竟再好的产品没有排名、没有权重&#xff0c;买家根本都没有机会看到你的产品&#xff0c;而且只有让淘宝感觉的产品有扶持必要它才会给你对应的…

网安系列【6】之[特殊字符] SQL注入揭秘:从入门到防御实战指南

文章目录一 真实案例二 SQL注入三 为什么危害堪比核弹&#xff1f;四 深入解剖攻击原理&#x1f3af; 4.1&#xff1a;探测SQL漏洞的存在&#x1f3af; 4.2&#xff1a;数据库信息探测&#x1f3af; 4.3&#xff1a;数据库信息探测&#x1f3af; 4.4&#xff1a;数据库信息进一…

Windows内核并发优化

Windows内核并发优化通过多层次技术手段提升多核环境下的系统性能&#xff0c;以下是关键技术实现方案&#xff1a; 一、内核锁机制优化‌ 精细化锁策略‌ 采用自旋锁&#xff08;Spinlock&#xff09;替代信号量处理短临界区&#xff0c;减少线程切换开销 对共享资源实施读…

【数据结构】 排序算法

【数据结构】 排序算法 一、排序1.1 排序是什么&#xff1f;1.2 排序的应用1.3 常见排序算法二、常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.2 选择排序2.2.1 直接选择排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序&#xff08;数组形式&#xff09;2.3 …

NumPy-核心函数np.matmul()深入解析

NumPy-核心函数np.matmul深入解析 一、矩阵乘法的本质与np.matmul()的设计目标1. 数学定义&#xff1a;从二维到多维的扩展2. 设计目标 二、np.matmul()核心语法与参数解析函数签名核心特性 三、多维场景下的核心运算逻辑1. 二维矩阵乘法&#xff1a;基础用法2. 一维向量与二维…

突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容…

深入探讨支持向量机(SVM)在乳腺癌X光片分类中的应用及实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

九、K8s污点和容忍

九、K8s污点和容忍 文章目录九、K8s污点和容忍1、污点&#xff08;Taint&#xff09;和容忍&#xff08;Toleration&#xff09;1.1 什么是污点&#xff08;Taint&#xff09;&#xff1f;1.2 什么是容忍&#xff08;Toleration&#xff09;&#xff1f;1.3 污点的影响效果&…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究

摘要&#xff1a;在数字技术重构文化传播生态的背景下&#xff0c;超级文化符号的塑造已突破传统IP运营框架。本文以开源AI智能名片链动21模式与S2B2C商城小程序的融合创新为切入点&#xff0c;结合"屿光生活"体验馆、快手烧烤摊主等典型案例&#xff0c;提出"技…