多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

元宝 LeetCode 223. 矩形面积 Java实现

元宝    LeetCode 223. 矩形面积 Java实现 LeetCode 223. 矩形面积 — Java 题解题目平面上有两只边平行于坐标轴的矩形矩形 A左下“(ax1, ay1)”右上“(ax2, ay2)”矩形 B左下“(bx1, by1)”右上“(bx2, by2)”求两矩形覆盖的总面积并集重叠只算一次。核心思路容斥原理总面积 矩形A面积 矩形B面积 - 重叠面积求重叠部分重叠区域若存在也是一个矩形左边界 “max(ax1, bx1)”右边界 “min(ax2, bx2)”下边界 “max(ay1, by1)”上边界 “min(ay2, by2)”重叠宽度 min(ax2, bx2) - max(ax1, bx1)重叠高度 min(ay2, by2) - max(ay1, by1)若宽度 ≤ 0 或高度 ≤ 0 → 不重叠重叠面积 0✅ Java 实现推荐写法class Solution {public int computeArea(int ax1, int ay1, int ax2, int ay2,int bx1, int by1, int bx2, int by2) {// 1. 各自面积int areaA (ax2 - ax1) * (ay2 - ay1);int areaB (bx2 - bx1) * (by2 - by1);// 2. 重叠部分的宽和高用 max(0,...) 兜底不重叠情况 int w Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1)); int h Math.max(0, Math.min(ay2, by2) - Math.max(ay1, by1)); // 3. 容斥原理 return areaA areaB - w * h; }}图解ay2 ┌────────────────┐ │ A │ │ by2 ┌──┼────────────┐ │ │ │ 重叠区域 │max(ay1,by1) ─────────┤ │ ││ └──┼────────────┘ay1 └────────────┘ bx2ax1 max(ax1,bx1) min(ax2,bx2)└─ 重叠宽度 ─┘示例演练输入: ax1-3, ay10, ax23, ay24, bx10, by1-1, bx29, by22矩形A面积 (3-(-3)) × (4-0) 6 × 4 24矩形B面积 (9-0) × (2-(-1)) 9 × 3 27重叠宽 min(3,9) - max(-3,0) 3 - 0 3重叠高 min(4,2) - max(0,-1) 2 - 0 2重叠面积 3 × 2 6输出: 24 27 - 6 45 ✅边界情况情况 结果完全不重叠 重叠宽/高 ≤ 0重叠面积 0完全包含 重叠面积 小矩形面积边/点相切 宽或高 0重叠面积 0完全重合 重叠面积 任一矩形面积复杂度时间“O(1)” — 常数次运算空间“O(1)” 考点总结容斥原理“|A ∪ B| |A| |B| - |A ∩ B|”一维区间重叠公式“max(0, min(a2,b2) - max(a1,b1))”二维推广x、y 方向独立计算再相乘Math.max(0, …) 兜底避免负面积整数溢出注意本题数据范围“int” 够用一句话记住各自相加减去重叠。
返回列表