寻找两个正序数组的中位数 - 困难
*************
Python
topic: 4. 寻找两个正序数组的中位数 - 力扣(LeetCode)
*************
Give the topic an inspection.
![]() |
Do the old topic will give you some new sparks. Before that, I do some really good craetive things about my logo. It will used at the very begin at my travel vlog. I am excited to do this little things. Maybe one shoot in my vedio costs me some time to figure it out. Recording makes me feel real in my life. I think the most time of my year is without ripples. But some moments light the boring days. I wil never forget the day I stood at the 5276 meters altitude. Nor will I forget the day I saw so many fish swimming next to me at the bottom of the sea. I love that moments. I am about to plan my travel to Xinjiang next mounth. I am so excited about the commoing travel.
![]() |
Back to the topic, the first thing is to merge the two list.
1、merge the two lists
the basic usage of adding element in the end of the list is very easy.
nums = [1, 2, 3]# append只能加一个
nums.append(4) # 输出: [1, 2, 3, 4]# extend可以加一串
nums.extend([4, 5]) # 输出: [1, 2, 3, 4, 4, 5]
and in the program I can use both of them.
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""merged = [] #创建一个新的list,并初始化为空i = 0j = 0#开始合并两个listif nums1[i] < nums2[j]:merged.append(nums1[i])i = i + 1else:merged.append(nums2[j])j = j + 1# 将剩下的元素添加到merged中merged.extend(nums1[i:]) # : 表示从i到末尾的elementsmerged.extend(nums2[j:])
Then find the one right in the middle of the line.
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""merged = [] #创建一个新的list,并初始化为空i = 0j = 0#开始合并两个listif nums1[i] < nums2[j]:merged.append(nums1[i])i = i + 1else:merged.append(nums2[j])j = j + 1# 将剩下的元素添加到merged中merged.extend(nums1[i:]) # : 表示从i到末尾的elementsmerged.extend(nums2[j:])# 找到中间那个length = len(merged)if length % 2 == 1:return merged[length // 2] # //是整数除法的意思else:return (merged[length // 2 - 1] + merged[length // 2]) / 2.0
something wrong as usual.
![]() |
ai tell me that line 22 went wrong. add the loop.
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""merged = [] #创建一个新的list,并初始化为空i = 0j = 0#开始合并两个listwhile i < len(nums1) and j < len(nums2):if nums1[i] < nums2[j]:merged.append(nums1[i])i = i + 1else:merged.append(nums2[j])j = j + 1# 将剩下的元素添加到merged中merged.extend(nums1[i:]) # : 表示从i到末尾的elementsmerged.extend(nums2[j:])# 找到中间那个length = len(merged)if length % 2 == 1:return merged[length // 2] # //是整数除法的意思else:return (merged[length // 2 - 1] + merged[length // 2]) / 2.0
this code works well, but . If you notice that, you will ask what is time complexity.
iterate through the array: i = 0 -> n O(n)
嵌套i次: O(n的几次方)
二分查找:O(log n)
so this topic tell you that you have to use the dichotomy to solve the problem. Make sure that the shorter one stands ahead.
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""# 短的数组要在前面if len(nums1) > len(nums2):nums1, nums2 = nums2. nums1# 初始化两个指针,用于二分法查找m = len(nums1)n = len(nums2)left = 0right = mtotal_left = (m + n + 1) / 2
Then make pointer i and point j stand just at the middle of the line. pointer i is kind of knife, i cuts the whole array which tears the array apart.
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""# 短的数组要在前面if len(nums1) > len(nums2):nums1, nums2 = nums2. nums1# 初始化两个指针,用于二分法查找m = len(nums1)n = len(nums2)left = 0right = mtotal_left = (m + n + 1) / 2# 让两个指针先到中间站着位置while left <= right:i = (left + right) // 2 j = total_left - i# 处理边界问题
i = (left + right) // 2, pointer i could be land in nums1, also could be land in nums2.
i
是 nums1
左边部分的长度,j
是 nums2
左边部分的长度。
如果 nums2_left > nums1_right
,说明 nums2
的左边太大,需减少 j
(即增大 i
)。
如果 nums1_left > nums2_right
,说明 nums1
的左边太大,需减少 i
。
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""# 短的数组要在前面if len(nums1) > len(nums2):nums1, nums2 = nums2, nums1# 初始化两个指针,用于二分法查找m = len(nums1)n = len(nums2)left = 0right = mtotal_left = (m + n + 1) / 2 # 中位数左边应该有的元素个数# 让两个指针先到中间站着位置while left <= right:i = (left + right) // 2 j = total_left - i# 处理边界问题# 处理边界:当 i=0 时,nums1_left 无元素,设为 -∞;i=m 时,nums1_right 无元素,设为 +∞nums1_left = -float('inf') if i == 0 else nums1[i-1]nums1_right = float('inf') if i == m else nums1[i]# 同理处理 nums2 的边界nums2_left = -float('inf') if j == 0 else nums2[j-1]nums2_right = float('inf') if j == n else nums2[j]
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: float"""# 短的数组要在前面if len(nums1) > len(nums2):nums1, nums2 = nums2, nums1# 初始化两个指针,用于二分法查找m = len(nums1)n = len(nums2)left = 0right = mtotal_left = (m + n + 1) / 2 # 中位数左边应该有的元素个数# 让两个指针先到中间站着位置while left <= right:i = (left + right) // 2 j = total_left - i# 处理边界问题# 处理边界:当 i=0 时,nums1_left 无元素,设为 -∞;i=m 时,nums1_right 无元素,设为 +∞nums1_left = -float('inf') if i == 0 else nums1[i-1]nums1_right = float('inf') if i == m else nums1[i]# 同理处理 nums2 的边界nums2_left = -float('inf') if j == 0 else nums2[j-1]nums2_right = float('inf') if j == n else nums2[j]# 检查分割条件if nums1_left <= nums2_right and nums2_left <= nums1_right:if (m + n) % 2 == 1:return max(nums1_left, nums2_left)else:return (max(nums1_left, nums2_left) + min(nums1_right, nums2_right)) / 2.0elif nums1_left > nums2_right:right = i - 1else:left = i + 1
举个例子:
nums1 = [1]
(长度m = 1
)nums2 = [2, 3, 4, 5, 6, 7, 8, 9]
(长度n = 8
)
1. 初始化变量
m = 1
(nums1
的长度)n = 8
(nums2
的长度)total_left = (1 + 8 + 1) // 2 = 5
(中位数左边应有 5 个元素)- 二分查找范围:
left = 0
,right = m = 1
2. 二分查找过程
第一次迭代:
i = (left + right) // 2 = (0 + 1) // 2 = 0
j = total_left-i = 5-0 = 5
分割结果:
nums1
的分割点i = 0
:- 左边:
[]
(nums1_left = -∞
) - 右边:
[1]
(nums1_right = 1
)
- 左边:
nums2
的分割点j = 5
:- 左边:
[2, 3, 4, 5, 6]
(nums2_left = 6
) - 右边:
[7, 8, 9]
(nums2_right = 7
)
- 左边:
检查分割条件:
nums1_left <= nums2_right
→-∞ <= 7
✅nums2_left <= nums1_right
→6 <= 1
❌
调整二分范围:
由于 nums2_left > nums1_right
(6 > 1
),说明 nums2
的左边部分太大,需要减少 nums2
的左边元素数量。
因此,增大 i
(让 nums1
贡献更多左边元素,从而减少 nums2
的左边元素):
left = i + 1 = 1
第二次迭代:
i = (1 + 1) // 2 = 1
j = 5-1 = 4
分割结果:
nums1
的分割点i = 1
:- 左边:
[1]
(nums1_left = 1
) - 右边:
[]
(nums1_right = +∞
)
- 左边:
nums2
的分割点j = 4
:- 左边:
[2, 3, 4, 5]
(nums2_left = 5
) - 右边:
[6, 7, 8, 9]
(nums2_right = 6
)
- 左边:
检查分割条件:
nums1_left <= nums2_right
→1 <= 6
✅nums2_left <= nums1_right
→5 <= +∞
✅
分割合法!此时:
- 左边部分:
[1] + [2, 3, 4, 5]
(共 5 个元素) - 右边部分:
[] + [6, 7, 8, 9]
(共 4 个元素)
3. 计算中位数
- 总长度
m + n = 9
(奇数),中位数是左边部分的最大值:
max(nums1_left, nums2_left) = max(1, 5) = 5
相关文章:

寻找两个正序数组的中位数 - 困难
************* Python topic: 4. 寻找两个正序数组的中位数 - 力扣(LeetCode) ************* Give the topic an inspection. Do the old topic will give you some new sparks. Before that, I do some really good craetive things about my logo. …...

国产密码新时代!华测国密 SSL 证书解锁安全新高度
在数字安全被提升到国家战略高度的今天,国产密码算法成为筑牢网络安全防线的关键力量。华测国密SSL证书凭借其强大性能与贴心服务,为企业网络安全保驾护航,成为符合国家安全要求的不二之选! 智能兼容,告别浏览器适配…...

【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
目录 一、引言 二、金仓数据库概述 2.1 金仓数据库的背景 2.2 核心技术特点 2.3 行业应用案例 三、金仓数据库的产品优化提案 3.1 性能优化 3.1.1 查询优化 3.1.2 索引优化 3.1.3 缓存优化 3.2 可扩展性优化 3.2.1 水平扩展与分区设计 3.2.2 负载均衡与读写分离 …...
互联网大厂Java求职面试:AI与大模型集成的云原生架构设计
互联网大厂Java求职面试:AI与大模型集成的云原生架构设计 引言 在现代互联网企业中,AI与大模型技术的应用已经成为不可或缺的一部分。特别是在短视频平台、电商平台和金融科技等领域,如何高效地将大模型集成到现有的云原生架构中是一个巨大…...

股指期货套期保值怎么操作?
股指期货套期保值就是企业或投资者通过持有与其现货市场头寸相反的期货合约,来对冲价格风险的一种方式。换句话说,就是你在股票市场上买了股票(现货),担心股价下跌会亏钱,于是就在期货市场上卖出相应的股指…...

基于IBM BAW的Case Management进行项目管理示例
说明:使用IBM BAW的难点是如何充分利用其现有功能根据实际业务需要进行设计,本文是示例教程,因CASE Manager使用非常简单,这里重点是说明如何基于CASE Manager进行项目管理,重点在方案设计思路上,其中涉及的…...

黑马k8s(七)
1.Pod介绍 查看版本: 查看类型,这里加s跟不加s没啥区别,可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像,策略是Never,启动失败 查看拉去策略: 更改拉去策略: 4.启动命令 运行的是nginx、busv…...

九、HQL DQL七大查询子句
作者:IvanCodes 日期:2025年5月15日 专栏:Hive教程 Apache Hive 的强大之处在于其类 SQL 的查询语言 HQL,它使得熟悉 SQL 的用户能够轻松地对存储在大规模分布式系统(如 HDFS)中的数据进行复杂的查询和分析…...
基于中心点预测的视觉评估与可视化流程
基于中心点预测的视觉评估与可视化流程 基于中心点预测的视觉评估与可视化流程一、脚本功能概览二、可视化与评分机制详解1. 真实框解析2. 调用模型处理帧3. 预测中心点与真实值的对比4. 打分策略5. 图像可视化三、目录结构要求四、运行方式五、应用场景与拓展思路六、总结七,…...

RTSP 播放器技术探究:架构、挑战与落地实践
RTSP 播放器为什么至今无法被淘汰? 在实时视频传输领域,RTSP(Real-Time Streaming Protocol)作为最基础、最常见的协议之一,至今依然被广泛用于监控设备、IP Camera、视频服务器等设备中。然而,要构建一个稳…...

实验5 DNS协议分析与测量
实验5 DNS协议分析与测量 1、实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2、实验环境 硬件要求:阿里云云主机ECS 一台。 软件要…...
编程日志5.8
二叉树练习题 1.965. 单值二叉树 - 力扣(LeetCode) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) :…...

【鸿蒙开发】性能优化
语言层面的优化 使用明确的数据类型,避免使用模糊的数据类型,例如ESObject。 使用AOT模式 AOT就是提前编译,将字节码提前编译成机器码,这样可以充分优化,从而加快执行速度。 未启用AOT时,一边运行一边进…...

2025-05-13 学习记录--Python-循环:while循环 + while-else循环 + for循环 + 循环控制
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、循环 ⭐️ (一)、while循环 🍭 初始条件设置 -- 通常是重复执行的 计数器while 条件(判…...

Vue3学习(组合式API——生命周期函数基础)
目录 一、Vue3组合式API中的生命周期函数。 (1)各阶段生命周期涉及函数简单介绍。 <1>创建挂载阶段的生命周期函数。 <2>更新阶段的生命周期函数。 <3>卸载阶段的生命周期函数。 <4>错误处理的生命周期函数。 (2&…...
全面指南:Xinference大模型推理框架的部署与使用
全面指南:Xinference大模型推理框架的部署与使用 Xinference(Xorbits Inference)是一个功能强大的分布式推理框架,专为简化各种AI模型的部署和管理而设计。本文将详细介绍Xinference的核心特性、版本演进,并提供多种部署方式的详细指南,包括本地部署、Docker-Compose部署…...

计量——检验与代理变量
1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log(y)β0β1x1β2x2β3x3u log(y)β0β1log(x1)β2log(x2)β3log(x3)u 1.对logÿ…...
Cocos Creator 3.8.5 构建依赖环境配置文档
Cocos Creator 3.8.5 构建依赖环境配置文档 文章目录 Cocos Creator 3.8.5 构建依赖环境配置文档✅ 构建依赖汇总表✅ 构建平台配置说明👉 Windows 构建👉 Android 构建 ✅ 推荐构建环境组合(稳定)✅ 常见问题提示 适用于打包 An…...
实验五:以太网UDP全协议栈的实现(通过远程实验系统)
文章目录 FPGA以太网:从ARP到UDP的完整协议栈一、引言二、核心模块详解1. ARP协议处理模块1.1 `arp_cache`:ARP缓存模块1.2 `arp_tx`:ARP请求与应答发送模块1.3 `arp_rx`:ARP接收与解析模块2. MAC层处理模块2.1 `mac_layer`:MAC层顶层模块2.2 `mac_tx_mode`:MAC发送模式选…...

HTML-实战之 百度百科(影视剧介绍)
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...
了解光学影像
本文来源 : 腾讯元宝 光学影像是一种通过光学技术捕捉、记录和处理图像的技术,广泛应用于医学、工业、安防、科研等多个领域。以下是关于光学影像的详细介绍: 1. 基本原理 光学影像基于光的传播、反射、折射和散射等物理现象。通过…...

计算机视觉---目标追踪(Object Tracking)概览
一、核心定义与基础概念 1. 目标追踪的定义 定义:在视频序列或连续图像中,对一个或多个感兴趣目标(如人、车辆、物体等)的位置、运动轨迹进行持续估计的过程。核心任务:跨帧关联目标,解决“同一目标在不同…...

Weblogic SSRF漏洞复现(CVE-2014-4210)【vulhub靶场】
漏洞概述: Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。 漏洞形成原因: WebLogic Server 的 UDDI 组件(uddiexplorer.war)中的 SearchPublicR…...
fakeroot 在没有超级用户权限的情况下模拟文件系统的超级用户行为
fakeroot 是一个在 Linux 环境中使用的工具,它允许用户在没有超级用户权限的情况下模拟文件系统的超级用户行为。它是一个在 Linux 环境中广泛使用的工具,通常包含在大多数 Linux 发行版的软件仓库中。 主要功能 模拟 root 权限:fake…...

AI大模型应用:17个实用场景解锁未来
任何新技术的普及都需要经历一段漫长的过程,人工智能大模型也不例外。 尽管某些行业的从业者已经开始将大模型融入日常工作,但其普及程度仍远未达到“人手必备”的地步。 那么,究竟是什么限制了它的广泛应用?普通人如何才能用好…...
激光雷达点云畸变消除:MCU vs CPU 方案详解
在移动机器人、自动驾驶等场景中,激光雷达(LiDAR)用于获取高精度的空间点云数据。然而,当雷达在运动中扫描时,不同点的采集时刻对应的位置不同,就会出现“运动畸变(Motion Distortion࿰…...

java17
1.常见API之BigDecimal 底层存储方式: 2.如何分辨过时代码: 有横线的代码表示该代码已过时 3.正则表达式之字符串匹配 注意:如果X不是单一字符,需要加[]中括号 注意:1.想要表达正则表达式里面的.需要\\. 2.想要表…...
深度学习中的提示词优化:梯度下降全解析
深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...
多智能体Multi-Agent应用实战与原理分析
一:Agent 与传统工具调用的对比 在当今的开发环境中,Agent 的出现极大地简化了工作流程。其底层主要基于提示词、模型和工具。用户只需向 Agent 输入需求,Agent 便会自动分析需求,并利用工具获取最终答案。而传统方式下,若没有 Agent,我们则需要手动编码来执行工具,还要…...

C++算法(22):二维数组参数传递,从内存模型到高效实践
引言 在C程序设计中,二维数组的参数传递是许多开发者面临的棘手问题。不同于一维数组的相对简单性,二维数组在内存结构、类型系统和参数传递机制上都存在独特特性。本文将深入探讨静态数组、动态数组以及STL容器三种实现方式,通过底层原理分…...