news 2026/11/3 8:23:51

LeetCode 3047题解:矩形相交区域最大正方形面积计算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 3047题解:矩形相交区域最大正方形面积计算

1. 问题背景与核心挑战

最近在刷LeetCode时遇到一道有趣的几何题目(3047题),要求计算多个矩形相交区域内的最大正方形面积。这类问题在实际开发中其实有不少应用场景,比如游戏开发中的碰撞检测、UI布局计算,甚至是地图应用中的区域重叠分析。

题目给定的是若干个矩形的左下角和右上角坐标,要求我们找出任意两个矩形相交区域中能够容纳的最大正方形面积。乍看之下似乎简单,但要在保证效率的前提下正确处理各种边界情况,还是需要仔细思考的。

2. 暴力枚举算法详解

2.1 算法核心思想

暴力枚举法虽然听起来不够"聪明",但在数据规模可控的情况下(题目中N≤1000),它往往是最直接有效的解决方案。这个算法的核心思路是:

  1. 遍历所有可能的矩形对组合
  2. 计算每对矩形的相交区域
  3. 在相交区域中找到可能的最大正方形
  4. 记录并更新全局最大值

提示:虽然时间复杂度是O(N²),但对于N=1000的情况,大约需要50万次计算,现代计算机完全可以在毫秒级完成。

2.2 关键步骤实现细节

2.2.1 矩形相交判断

判断两个矩形是否相交是本题的第一个关键点。给定矩形A和矩形B:

  • 矩形A:左下角(ax1, ay1),右上角(ax2, ay2)
  • 矩形B:左下角(bx1, by1),右上角(bx2, by2)

它们的相交区域可以通过以下方式计算:

// 相交矩形的左下角 int xbl = Math.max(ax1, bx1); int ybl = Math.max(ay1, by1); // 相交矩形的右上角 int xtr = Math.min(ax2, bx2); int ytr = Math.min(ay2, by2);

这个计算过程的几何意义是:相交矩形的左下角是两个矩形左下角的"最大"值(即最靠右上的那个点),而右上角是两个矩形右上角的"最小"值(即最靠左下的那个点)。

2.2.2 有效相交判断

计算出相交区域后,需要判断这个相交是否有效:

int width = xtr - xbl; int height = ytr - ybl;

如果width或height小于等于0,说明两个矩形没有实际相交(可能是相离或仅边界接触)。这时可以直接跳过这对矩形组合。

2.2.3 最大正方形计算

在有效的相交矩形中,能容纳的最大正方形边长由较短的边决定:

int squareSide = Math.min(width, height);

这个值可能与当前记录的最大边长比较,更新全局最大值。

2.3 完整代码实现

以下是完整的Java实现,包含了详细的注释:

class Solution { public long largestSquareArea(int[][] bottomLeft, int[][] topRight) { int n = bottomLeft.length; int maxSide = 0; // 双重循环枚举所有矩形对 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { // 计算相交区域边界 int x1 = Math.max(bottomLeft[i][0], bottomLeft[j][0]); int y1 = Math.max(bottomLeft[i][1], bottomLeft[j][1]); int x2 = Math.min(topRight[i][0], topRight[j][0]); int y2 = Math.min(topRight[i][1], topRight[j][1]); // 计算相交区域尺寸 int width = x2 - x1; int height = y2 - y1; // 确定最大正方形边长 int currentSide = Math.min(width, height); if (currentSide > maxSide) { maxSide = currentSide; } } } // 返回面积(注意long类型转换) return (long)maxSide * maxSide; } }

3. 算法优化思考

虽然暴力解法已经能够通过测试用例,但我们还是可以思考可能的优化方向:

3.1 提前终止条件

如果在某次迭代中发现当前可能的最大正方形边长已经不可能被超越,可以提前终止循环。例如:

// 计算剩余矩形可能的最大边长 int possibleMax = Math.min(maxWidth, maxHeight); if (possibleMax <= maxSide) { break; }

3.2 空间分区优化

对于矩形在空间中分布不均匀的情况,可以考虑使用空间分区数据结构(如四叉树)来减少不必要的相交测试。

3.3 并行计算

由于各矩形对的计算是独立的,可以考虑使用多线程并行处理。

注意:这些优化在实际面试中可能需要根据具体情况讨论,暴力解法通常是首选的可靠方案。

4. 常见错误与调试技巧

在实现这个算法时,容易遇到以下几个典型问题:

4.1 整数溢出问题

当计算面积时,如果直接使用int类型相乘可能会导致溢出:

// 错误写法 return maxSide * maxSide; // 正确写法 return (long)maxSide * maxSide;

4.2 边界条件处理

需要特别注意以下边界情况:

  1. 两个矩形完全不相交
  2. 两个矩形仅边或角接触
  3. 多个矩形有相同的相交区域
  4. 输入矩形数量为0或1的情况

4.3 坐标顺序假设

不要假设输入的坐标一定是左下角在前、右上角在后,虽然题目描述如此,但在实际工程中应该进行验证。

5. 复杂度分析与适用场景

5.1 时间复杂度

该算法的时间复杂度为O(N²),因为需要检查所有矩形对。对于N=1000的情况,需要大约500,500次计算,这在现代计算机上完全可行。

5.2 空间复杂度

空间复杂度为O(1),只使用了固定数量的临时变量,不随输入规模增长。

5.3 适用场景评估

这种解法适用于:

  1. 矩形数量不超过几千个的场景
  2. 需要快速实现可靠解决方案的情况
  3. 作为更复杂算法的基准参考

对于更大规模的数据,可能需要考虑更高效的算法或近似解法。

6. 实际应用扩展

这个问题虽然来自算法题库,但其核心思想在实际工程中有广泛应用:

  1. 游戏开发:检测游戏对象碰撞后的最大可移动区域
  2. UI布局:计算多个窗口重叠区域的最大可用空间
  3. 地理信息系统:分析多个地理区域重叠部分的特性
  4. 计算机视觉:在目标检测中分析多个bounding box的关系

理解这个基础算法后,可以很容易地扩展到三维空间(计算长方体的相交区域)或其他几何形状的交集计算。

7. 个人实现心得

在实现这个算法的过程中,我总结了几个值得注意的经验:

  1. 几何可视化:在纸上画出各种相交情况(完全相交、部分相交、边接触、角接触等)能帮助理解算法逻辑。

  2. 测试用例设计:应该包含以下测试场景:

    • 无相交矩形
    • 完全包含的矩形
    • 边接触的矩形
    • 大规模随机矩形测试
  3. 性能监控:即使在允许的时间复杂度内,也要注意实际运行时间,特别是当N接近上限时。

  4. 代码可读性:虽然算法不复杂,但良好的变量命名和注释仍然很重要。比如使用x_bl/y_bl而不是简单的x1/y1,能更清晰地表达几何意义。

这个题目很好地展示了如何将几何直觉转化为精确的算法实现,也提醒我们在解决看似简单的问题时,要注意各种边界情况和实现细节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 8:23:21

C语言六周学习路线:从最大公约数到自动对拍题库

简介&#xff1a;面向C语言初学者与课程复习者的基础学习文档&#xff0c;围绕计算机与编程语言、变量与输入、表达式与运算符、程序设计等入门模块展开&#xff0c;帮助读者建立从编译与解释执行、C语言标准到基础语法的整体认识。内容结合最大公约数、英制身高单位转换、时间…

作者头像 李华
网站建设 2026/11/3 8:23:04

SAP EWM零基础入门:仓库结构、主数据与收货发货配置指南

简介&#xff1a;SAP EWM110&#xff08;课程版本17&#xff09;基础定制参与者手册英文版&#xff0c;面向SAP EWM顾问、仓库管理实施人员及参加官方讲师培训的学员&#xff0c;用于系统掌握Extended Warehouse Management的核心配置与实施要点。压缩包内含1个PDF文件&#xf…

作者头像 李华
网站建设 2026/11/3 8:22:30

代码评审结构化、ADHD友好输出、ECC底座与文本去AI味

1. 这不是一份“新闻简报”&#xff0c;而是一份开发者日常工具链的实战切片你点开这份周刊标题时&#xff0c;大概率正卡在某个需求评审会上——产品经理刚甩来一页密密麻麻的PRD&#xff0c;后端同事在 Slack 里发了个带三个问号的截图&#xff1a;“这个接口返回字段要不要加…

作者头像 李华
网站建设 2026/11/3 8:21:38

CDGA数据治理611题精讲:考点拆解与避坑复盘

简介&#xff1a;面向备考DAMA中国CDGA数据治理工程师认证的考生&#xff0c;这份重点知识题库以611道题、122页的体量覆盖考试核心知识域&#xff0c;可用于章节复习、考前刷题与查漏补缺&#xff0c;也为后续报考CDGP打下基础。资源包共1个PDF文件&#xff0c;大小约1.35MB&a…

作者头像 李华
网站建设 2026/11/3 8:21:24

同步FIFO在串并转换中的跨时钟域设计与实现

1. 项目概述&#xff1a;为什么“同步FIFO的串并_同步FIFO”不是一句绕口令&#xff0c;而是数字电路设计里最常被低估的硬核基本功“同步FIFO的串并_同步FIFO”这个标题乍看像程序员在调试时顺手敲错的变量名——下划线重复、术语堆叠、逻辑关系模糊。但如果你在数字电路设计、…

作者头像 李华
网站建设 2026/11/3 8:21:23

OAuth2.0实现Sward与Soular系统单点登录集成

1. 项目背景与核心价值在当今多系统共存的企业环境中&#xff0c;统一身份认证已成为刚需。最近我在实际项目中遇到了一个典型场景&#xff1a;需要将Sward平台与Soular系统进行深度集成&#xff0c;实现用户只需一次登录即可在两个平台间无缝切换。这种方案不仅能提升用户体验…

作者头像 李华