LeetCode 题解工作台
矩形面积
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 …
2
题型
6
代码语言
3
相关题
当前训练重点
中等 · 数学·结合·几何
答案摘要
我们先计算出两个矩形各自的面积,记为 和 ,然后计算重叠的宽度 和高度 ,那么重叠的面积为 $max(width, 0) \times max(height, 0)$,最后将 , 和重叠面积相减即可。 时间复杂度 ,空间复杂度 。
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 数学·结合·几何 题型思路
题目描述
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:
- 第一个矩形由其左下顶点
(ax1, ay1)和右上顶点(ax2, ay2)定义。 - 第二个矩形由其左下顶点
(bx1, by1)和右上顶点(bx2, by2)定义。
示例 1:
输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2 输出:45
示例 2:
输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2 输出:16
提示:
-104 <= ax1 <= ax2 <= 104-104 <= ay1 <= ay2 <= 104-104 <= bx1 <= bx2 <= 104-104 <= by1 <= by2 <= 104
解题思路
方法一:计算重叠面积
我们先计算出两个矩形各自的面积,记为 和 ,然后计算重叠的宽度 和高度 ,那么重叠的面积为 ,最后将 , 和重叠面积相减即可。
时间复杂度 ,空间复杂度 。
class Solution:
def computeArea(
self,
ax1: int,
ay1: int,
ax2: int,
ay2: int,
bx1: int,
by1: int,
bx2: int,
by2: int,
) -> int:
a = (ax2 - ax1) * (ay2 - ay1)
b = (bx2 - bx1) * (by2 - by1)
width = min(ax2, bx2) - max(ax1, bx1)
height = min(ay2, by2) - max(ay1, by1)
return a + b - max(height, 0) * max(width, 0)
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | complexity is O(1) because only constant arithmetic operations are needed. Space complexity is O(1) since no additional data structures are used beyond a few variables for coordinates and overlap calculation. |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Expect clear handling of overlapping regions.
- question_mark
Look for edge cases where rectangles touch but do not overlap.
- question_mark
Check that the solution avoids negative overlap or double counting.
常见陷阱
外企场景- error
Forgetting to subtract the overlapping area, leading to inflated totals.
- error
Incorrectly calculating overlap when rectangles do not intersect.
- error
Confusing width and height computations with coordinate differences.
进阶变体
外企场景- arrow_right_alt
Computing total area for multiple rectangles, not just two.
- arrow_right_alt
Handling rectangles with floating-point coordinates instead of integers.
- arrow_right_alt
Finding the overlapping area only without computing total area.