矩形面积(LeetCode 223):两矩形覆盖总面积与容斥原理的几何数学解法(AlgoNote 题解)
教程文档知识库【免费下载链接】AlgoNote⛽️「算法通关手册」从零开始的「算法与数据结构」学习教程200 道「算法面试热门题目」1000 道「LeetCode 题目解析」持续更新中项目地址https://gitcode.com/gh_mirrors/le/AlgoNote点击查看免费下载本文基于「算法通关手册」AlgoNote 仓库中的 0223. 矩形面积题解 展开。题目属于「几何、数学」分类、难度中等核心是用容斥原理把「两个矩形覆盖的总面积」拆解为「两矩形面积之和减去重叠部分面积」。读完本文你将掌握如何用一维区间交集的方法在 O(1) 时间内求出二维矩形的重叠区域长宽并能够直接迁移到矩形重叠判定0836、多矩形面积并0850等系列问题上。一、题目描述与坐标约定给定两个矩形的左下角、右上角坐标(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2)(ax1, ay1)表示第一个矩形左下角坐标(ax2, ay2)表示第一个矩形右上角坐标(bx1, by1)表示第二个矩形左下角坐标(bx2, by2)表示第二个矩形右上角坐标。要求计算出两个矩形覆盖的总面积。题目约定两个矩形的边均与坐标轴平行axis-aligned因此每个矩形都可以用其在 x 轴与 y 轴上的两条投影线段完整刻画矩形 A 在 x 轴上的投影区间为(ax1, ax2)在 y 轴上的投影区间为(ay1, ay2)矩形 B 在 x 轴上的投影区间为(bx1, bx2)在 y 轴上的投影区间为(by1, by2)。在仓库的题目索引 00_05_solutions_list.md 中本题被标注为「几何、数学」标签、中等难度完整题解位于 docs/solutions/0200-0299/rectangle-area.md。二、解题思路容斥原理分解总面积两个矩形覆盖的总面积满足如下恒等式总面积 第一个矩形面积 第二个矩形面积 - 重叠部分面积这是典型的容斥原理应用先把两个矩形的面积直接相加此时重叠区域被重复计算了一次因此必须再减去一次重叠区域的面积。具体分三步分别计算两个矩形的面积矩形面积 宽 × 高 (右上角 x - 左下角 x) × (右上角 y - 左下角 y)求出相交部分的长、宽重叠矩形的宽 两个矩形在 x 轴投影线段的交集长度重叠矩形的高 两个矩形在 y 轴投影线段的交集长度计算重叠部分面积overlap_width × overlap_height若某个方向没有交集则重叠面积为 0。2.1 核心技巧把二维重叠退化为一维区间交集矩形在 x 轴与 y 轴上的投影都是区间两个轴对齐矩形的重叠区域之所以仍是矩形是因为其 x 区间与 y 区间分别独立取交集。两个区间[l1, r1]与[l2, r2]的交集长度为intersection_length max(0, min(r1, r2) - max(l1, l2))当两个区间确实相交时min(r1, r2) max(l1, l2)差值为正即为交集长度当两个区间无交集相离或仅边界相触时min(r1, r2) max(l1, l2)差值 ≤ 0通过外层max(0, ...)把结果钳制为 0。套用到矩形上overlap_width max(0, min(ax2, bx2) - max(ax1, bx1)) overlap_height max(0, min(ay2, by2) - max(ay1, by1))这个「投影区间交集」的视角同样出现在仓库的另一道姊妹题 0836. 矩形重叠题解 中判断两矩形是否重叠只需检查min(rec1[2], rec2[2]) max(rec1[0], rec2[0])x 方向有交集且min(rec1[3], rec2[3]) max(rec1[1], rec2[1])y 方向有交集同时成立即可。本 223 题正是把该「有无交集」的布尔判定升级为「交集长度是多少」的数值计算。三、完整代码实现仓库题解 docs/solutions/0200-0299/rectangle-area.md 给出的参考实现如下class Solution: def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) - int: area_a (ax2 - ax1) * (ay2 - ay1) area_b (bx2 - bx1) * (by2 - by1) overlap_width max(0, min(ax2, bx2) - max(ax1, bx1)) overlap_height max(0, min(ay2, by2) - max(ay1, by1)) area_overlap overlap_width * overlap_height return area_a area_b - area_overlap3.1 逐行解读代码行作用说明area_a (ax2 - ax1) * (ay2 - ay1)计算第一个矩形面积宽 右上角 x − 左下角 x高 右上角 y − 左下角 yarea_b (bx2 - bx1) * (by2 - by1)计算第二个矩形面积同上套用第二个矩形的坐标overlap_width max(0, min(ax2, bx2) - max(ax1, bx1))求重叠宽度x 方向两投影区间的交集长度不相交时为 0overlap_height max(0, min(ay2, by2) - max(ay1, by1))求重叠高度y 方向两投影区间的交集长度不相交时为 0area_overlap overlap_width * overlap_height计算重叠面积宽或高任一为 0 时乘积为 0return area_a area_b - area_overlap容斥求和总面积 面积 A 面积 B − 重叠面积3.2 边界情况验证两矩形完全不相交min(ax2, bx2) max(ax1, bx1)或min(ay2, by2) max(ay1, by1)此时overlap_width或overlap_height被钳制为 0area_overlap 0返回area_a area_b符合预期一个矩形完全包含另一个交集区间长度恰等于较小矩形的宽和高重叠面积等于较小矩形面积总面积等于较大矩形面积仅边界相触共享一条边或一个顶点相触方向交集长度为 0重叠面积为 0总面积仍为两矩形面积之和符合题目对「覆盖面积」的通常定义面积为零的重叠不计入重复覆盖。3.3 复杂度分析时间复杂度O(1)。仅执行常数次算术运算与min/max比较不随输入规模变化空间复杂度O(1)。只使用若干个局部变量无额外数据结构。四、思路延展从两个矩形到矩形系列问题本题的两条核心思想——「投影区间交集」与「容斥去重」——在仓库中可以延伸到更复杂的矩形几何系列题重叠判定0836简单0836. 矩形重叠题解 把 223 题的overlap_width * overlap_height计算退化为布尔判断仅需验证两个方向投影区间是否均有正交集多矩形面积并0850困难0850. 矩形面积 II 题解 将两个矩形的容斥公式推广到任意多个矩形由于重叠区域只能计算一次需要借助「扫描线 动态开点线段树」对 y 方向区间进行覆盖计数再按 x 方向逐段累加面积返回对10^9 7取模的结果完美矩形0391困难0391. 完美矩形题解 进一步要求判断一组小矩形能否无重叠、无缝隙地拼成一个大矩形本质上是面积等式与顶点计数的组合验证。从这两个矩形的简单容斥到扫描线线段树求解面积并再到完美矩形的顶点计数可以看到「区间 容斥 扫描」构成了矩形几何问题的一条清晰进阶路径。读者在掌握本题 O(1) 解法后可按上述顺序在 docs/solutions 目录下继续深入对应题解。五、总结LeetCode 223「矩形面积」是一道典型的「几何 数学」中等题解题公式为总面积 S(A) S(B) − S(重叠)本质是容斥原理重叠区域的宽与高可分别通过两个坐标轴方向上的一维区间交集长度求得max(0, min(r1, r2) - max(l1, l2))是唯一需要掌握的子技巧该技巧同时覆盖了「无重叠」「包含」「相触」等全部边界情况无需任何特判算法时间复杂度 O(1)、空间复杂度 O(1)属于面试中高频出现的「数学公式推导 边界处理」类题目。赞分享教程文档知识库【免费下载链接】AlgoNote⛽️「算法通关手册」从零开始的「算法与数据结构」学习教程200 道「算法面试热门题目」1000 道「LeetCode 题目解析」持续更新中项目地址https://gitcode.com/gh_mirrors/le/AlgoNote点击查看免费下载相关推荐LeetCode-Go 题解223. Rectangle Area 矩形面积计算LeetCode Go 题解223. Rectangle Area 矩形面积计算 导读 本文讲解 LeetCode 第 223 题「Rectangle Are示例工程开发者指南基于Qwen2.5 Omni架构的ACE-Step Transcriber模型配置与调用方法开发者指南基于Qwen2.5 Omni架构的ACE Step Transcriber模型配置与调用方法 ACE Step Transcriber是一款基于QwLogicStack-LeetCode最大三角形面积LogicStack LeetCode最大三角形面积 题目描述 这是 LeetCode 上的 812. 最大三角形面积 https://link.gitcod教程文档上一篇Play Integrity Fix 终极指南如何让Root设备重新获得Google认证下一篇2025容器存储新范式WinFsp容器存储接口(CSI)实现指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kats 检测器共享数据结构详解:SingleSpike、ChangePointInterval、PercentageChange 与 AnomalyResponse 源码级解析

Kats 检测器共享数据结构详解:SingleSpike、ChangePointInterval、PercentageChange 与 AnomalyResponse 源码级解析

数据分析机器学习数据科学 【免费下载链接】Kats Kats, a kit to analyze time series data, a lightweight, easy-to-use, generalizable, and extendable framework to perform time series analysis, from understanding the key statistics and characteristics, detecting…

2026/10/11 4:00:14 阅读更多 →
Halide 循环嵌套解读:用 Func::print_loop_nest() 读懂调度产物

Halide 循环嵌套解读:用 Func::print_loop_nest() 读懂调度产物

编译器图像处理编程语言高性能计算 【免费下载链接】Halide a language for fast, portable data-parallel computation 项目地址: https://gitcode.com/gh_mirrors/ha/Halide 点击查看 免费下载 Func::print_loop_nest() 是 Halide 开发者在写调度(sch…

2026/10/11 3:59:02 阅读更多 →
Rust 通用和类型 Either 完全指南:Left/Right 变体、迭代器集成与序列化 —— 基于 makepad 仓库 vendored either crate 的源码解析

Rust 通用和类型 Either 完全指南:Left/Right 变体、迭代器集成与序列化 —— 基于 makepad 仓库 vendored either crate 的源码解析

前端UI组件3D渲染跨平台游戏开发 【免费下载链接】makepad Makepad is a creative software development platform for Rust that compiles to wasm/webGL, osx/metal, windows/dx11 linux/opengl 项目地址: https://gitcode.com/gh_mirrors/ma/makepad 点击查看 免…

2026/10/10 15:17:21 阅读更多 →

最新新闻

Python成绩统计作业复盘:从平行列表到字典与函数重构

Python成绩统计作业复盘:从平行列表到字典与函数重构

第二次作业发下来的那天,课程群里比平时安静了不少。第一次作业只要照着课堂示例把代码拼一拼,第二次题目一出,大家才发现要面对的是一整套流程:录入、存储、计算、排序、统计、输出。这道成绩统计题几乎在每个Python入门课程里都…

2026/10/12 5:52:28 阅读更多 →
前缀和进阶:哈希表、二维前缀和与树状数组

前缀和进阶:哈希表、二维前缀和与树状数组

刷LeetCode刷到一定量之后,你会发现前缀和就像一把“万能钥匙”:它能把区间求和从O(n)压到O(1),也能配合哈希表把子数组统计问题从O(n)压到O(n)。在上一个专题里,我详细讲过最基础的一维前缀和构造、区域和检索、中心下标这类直接…

2026/10/12 5:52:28 阅读更多 →
SpringBoot智能推荐卫生健康系统毕设实战:内容推荐算法实现

SpringBoot智能推荐卫生健康系统毕设实战:内容推荐算法实现

1. 项目概述1.1 这个毕设到底在做什么"基于springboot智能推荐的卫生健康系统的设计与实现",说人话就是:做一个能根据用户的身体状况、生活习惯和健康目标,主动给出个性化健康建议的Web平台。它不是一个简单的健康资讯网站&#xf…

2026/10/12 5:52:28 阅读更多 →
JAVA_HOME环境变量配置与排查:从报错到避坑全攻略

JAVA_HOME环境变量配置与排查:从报错到避坑全攻略

做了这么多年Java开发,几乎每个季度都得处理一次“JAVA_HOME环境变量”的幺蛾子。新同事入职第一件事是配JDK,老同事换项目第一件事是切版本,可翻来覆去出问题的,还是那个看起来人畜无害的JAVA_HOME。你可能也见过这样的报错&…

2026/10/12 5:52:28 阅读更多 →
3关键字B+树构建全解析:从分裂上提到删除合并

3关键字B+树构建全解析:从分裂上提到删除合并

如果你能在纸上从零构建一棵最多只装 3 个关键字的 B 树,那基本上就掌握了 B 树八成以上的难点。这是我当年准备面试时一个学长告诉我的,我照做之后发现确实如此——复杂的 m 阶 B 树,无非是把这里的“3”换成“几百”,分裂、上提…

2026/10/12 5:52:28 阅读更多 →
大模型推理优化实践:从KV Cache到语义缓存的三层缓存架构

大模型推理优化实践:从KV Cache到语义缓存的三层缓存架构

上个月排一个线上问题,我们的对外AI问答服务上线第三周,GPU没有扩容,但模型调用账单涨了快三倍。查了一圈下来最扎眼的还不是成本:平均每天十几万请求里差不多一半是“语义重复”——“附近有什么川菜馆”“川菜馆哪家好”“推荐一…

2026/10/12 5:51:27 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →